Skip to content

Commit 9b25a0c

Browse files
committed
fix some stuff after rebase
1 parent a584014 commit 9b25a0c

File tree

9 files changed

+100
-39
lines changed

9 files changed

+100
-39
lines changed

src/lib/crypto/hash_common.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "hash_crc24.hpp"
3939
#endif
4040
#include <set>
41+
#include <iterator>
4142

4243
static const struct hash_alg_map_t {
4344
pgp_hash_alg_t type;

src/lib/generate-key.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ adjust_hash_alg(rnp_keygen_crypto_params_t &crypto)
178178
case PGP_PKA_SPHINCSPLUS_SHAKE_128s:
179179
crypto.hash_alg = PGP_HASH_SHA3_256;
180180
break;
181+
case PGP_PKA_DILITHIUM5_ED448:
182+
FALLTHROUGH_STATEMENT;
181183
case PGP_PKA_DILITHIUM5_BP384:
182184
FALLTHROUGH_STATEMENT;
183185
case PGP_PKA_DILITHIUM5_P384:
@@ -461,9 +463,11 @@ keygen_primary_merge_defaults(rnp_keygen_primary_desc_t &desc)
461463
FALLTHROUGH_STATEMENT;
462464
case PGP_PKA_DILITHIUM3_P256:
463465
FALLTHROUGH_STATEMENT;
466+
case PGP_PKA_DILITHIUM3_BP256:
467+
FALLTHROUGH_STATEMENT;
464468
case PGP_PKA_DILITHIUM5_P384:
465469
FALLTHROUGH_STATEMENT;
466-
case PGP_PKA_DILITHIUM3_BP256:
470+
case PGP_PKA_DILITHIUM5_Ed448:
467471
FALLTHROUGH_STATEMENT;
468472
case PGP_PKA_DILITHIUM5_BP384:
469473
FALLTHROUGH_STATEMENT;

src/lib/key_material.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ KeyParams::create(pgp_pubkey_alg_t alg)
152152
return std::unique_ptr<KeyParams>(new ECCKeyParams(PGP_CURVE_ED25519));
153153
case PGP_PKA_X25519:
154154
return std::unique_ptr<KeyParams>(new ECCKeyParams(PGP_CURVE_25519));
155+
case PGP_PKA_ED448:
156+
return std::unique_ptr<KeyParams>(new ECCKeyParams(PGP_CURVE_ED448));
157+
case PGP_PKA_X448:
158+
return std::unique_ptr<KeyParams>(new ECCKeyParams(PGP_CURVE_448));
155159
#endif
156160
case PGP_PKA_DSA:
157161
return std::unique_ptr<KeyParams>(new DSAKeyParams());
@@ -161,7 +165,8 @@ KeyParams::create(pgp_pubkey_alg_t alg)
161165
#if defined(ENABLE_PQC)
162166
case PGP_PKA_KYBER768_X25519:
163167
FALLTHROUGH_STATEMENT;
164-
// TODO add case PGP_PKA_KYBER1024_X448: FALLTHROUGH_STATEMENT;
168+
case PGP_PKA_KYBER1024_X448:
169+
FALLTHROUGH_STATEMENT;
165170
case PGP_PKA_KYBER768_P256:
166171
FALLTHROUGH_STATEMENT;
167172
case PGP_PKA_KYBER1024_P384:
@@ -172,7 +177,8 @@ KeyParams::create(pgp_pubkey_alg_t alg)
172177
return std::unique_ptr<KeyParams>(new MlkemEcdhKeyParams(alg));
173178
case PGP_PKA_DILITHIUM3_ED25519:
174179
FALLTHROUGH_STATEMENT;
175-
// TODO: add case PGP_PKA_DILITHIUM5_ED448: FALLTHROUGH_STATEMENT;
180+
case PGP_PKA_DILITHIUM5_ED448:
181+
FALLTHROUGH_STATEMENT;
176182
case PGP_PKA_DILITHIUM3_P256:
177183
FALLTHROUGH_STATEMENT;
178184
case PGP_PKA_DILITHIUM5_P384:
@@ -409,6 +415,10 @@ KeyMaterial::create(pgp_pubkey_alg_t alg)
409415
return std::unique_ptr<KeyMaterial>(new Ed25519KeyMaterial());
410416
case PGP_PKA_X25519:
411417
return std::unique_ptr<KeyMaterial>(new X25519KeyMaterial());
418+
case PGP_PKA_ED448:
419+
return std::unique_ptr<KeyMaterial>(new Ed448KeyMaterial());
420+
case PGP_PKA_X448:
421+
return std::unique_ptr<KeyMaterial>(new X448KeyMaterial());
412422
#endif
413423
case PGP_PKA_SM2:
414424
return std::unique_ptr<KeyMaterial>(new SM2KeyMaterial());
@@ -2239,7 +2249,6 @@ SlhdsaKeyMaterial::write_secret(pgp_packet_body_t &pkt) const
22392249
bool
22402250
SlhdsaKeyMaterial::generate(rnp::SecurityContext &ctx, const KeyParams &params)
22412251
{
2242-
auto &slhdsa = dynamic_cast<const SlhdsaKeyParams &>(params);
22432252
if (pgp_sphincsplus_generate(&ctx.rng, &key_, alg_)) {
22442253
RNP_LOG("failed to generate SLH-DSA key for PK alg %d", alg_);
22452254
return false;

src/lib/key_material.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ class Ed448KeyMaterial : public KeyMaterial {
550550
bool parse_secret(pgp_packet_body_t &pkt) noexcept override;
551551
void write(pgp_packet_body_t &pkt) const override;
552552
void write_secret(pgp_packet_body_t &pkt) const override;
553-
bool generate(rnp::SecurityContext &ctx, const KeyParams &params) override;
553+
bool generate(rnp::SecurityContext &ctx, const KeyParams &params) override;
554554
rnp_result_t verify(const rnp::SecurityContext & ctx,
555555
const pgp_signature_material_t & sig,
556556
const rnp::secure_vector<uint8_t> &hash) const override;

src/lib/keygen.cpp

Lines changed: 64 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,39 @@ KeygenParams::check_defaults() noexcept
4242
if (hash_ == PGP_HASH_UNKNOWN) {
4343
hash_ = alg_ == PGP_PKA_SM2 ? PGP_HASH_SM3 : DEFAULT_PGP_HASH_ALG;
4444
}
45+
#if defined(ENABLE_PQC)
46+
// ensure PQC key hash binding
47+
switch (alg_) {
48+
case PGP_PKA_DILITHIUM3_ED25519:
49+
FALLTHROUGH_STATEMENT;
50+
case PGP_PKA_DILITHIUM5_ED448:
51+
FALLTHROUGH_STATEMENT;
52+
case PGP_PKA_DILITHIUM3_P256:
53+
FALLTHROUGH_STATEMENT;
54+
case PGP_PKA_DILITHIUM5_P384:
55+
FALLTHROUGH_STATEMENT;
56+
case PGP_PKA_DILITHIUM3_BP256:
57+
FALLTHROUGH_STATEMENT;
58+
case PGP_PKA_DILITHIUM5_BP384:
59+
if (!dilithium_hash_allowed(alg_, hash_)) {
60+
hash_ = dilithium_default_hash_alg(alg_);
61+
}
62+
break;
63+
64+
case PGP_PKA_SPHINCSPLUS_SHAKE_128f:
65+
FALLTHROUGH_STATEMENT;
66+
case PGP_PKA_SPHINCSPLUS_SHAKE_128s:
67+
FALLTHROUGH_STATEMENT;
68+
case PGP_PKA_SPHINCSPLUS_SHAKE_256s:
69+
if (!sphincsplus_hash_allowed(alg_, hash_)) {
70+
hash_ = sphincsplus_default_hash_alg(alg_);
71+
}
72+
break;
73+
default:
74+
break;
75+
}
76+
#endif
77+
4578
pgp_hash_alg_t min_hash = key_params_->min_hash();
4679
if (Hash::size(hash_) < Hash::size(min_hash)) {
4780
hash_ = min_hash;
@@ -66,15 +99,16 @@ KeygenParams::validate() const noexcept
6699
break;
67100
case PGP_PKA_DILITHIUM3_ED25519:
68101
FALLTHROUGH_STATEMENT;
69-
// TODO: add case PGP_PKA_DILITHIUM5_ED448: FALLTHROUGH_STATEMENT;
102+
case PGP_PKA_DILITHIUM5_ED448:
103+
FALLTHROUGH_STATEMENT;
70104
case PGP_PKA_DILITHIUM3_P256:
71105
FALLTHROUGH_STATEMENT;
72106
case PGP_PKA_DILITHIUM5_P384:
73107
FALLTHROUGH_STATEMENT;
74108
case PGP_PKA_DILITHIUM3_BP256:
75109
FALLTHROUGH_STATEMENT;
76110
case PGP_PKA_DILITHIUM5_BP384:
77-
if (!dilithium_hash_allowed(hash())) {
111+
if (!dilithium_hash_allowed(alg(), hash())) {
78112
RNP_LOG("invalid hash algorithm for the dilithium key");
79113
return false;
80114
}
@@ -132,37 +166,38 @@ KeygenParams::validate(const BindingParams &binding) const noexcept
132166
return validate();
133167
}
134168

135-
static const id_str_pair pubkey_alg_map[] = {{PGP_PKA_RSA, "RSA (Encrypt or Sign)"},
136-
{PGP_PKA_RSA_ENCRYPT_ONLY, "RSA Encrypt-Only"},
137-
{PGP_PKA_RSA_SIGN_ONLY, "RSA Sign-Only"},
138-
{PGP_PKA_ELGAMAL, "Elgamal (Encrypt-Only)"},
139-
{PGP_PKA_DSA, "DSA"},
140-
{PGP_PKA_ECDH, "ECDH"},
141-
{PGP_PKA_ECDSA, "ECDSA"},
142-
{PGP_PKA_EDDSA, "EdDSA"},
143-
{PGP_PKA_SM2, "SM2"},
169+
static const id_str_pair pubkey_alg_map[] = {
170+
{PGP_PKA_RSA, "RSA (Encrypt or Sign)"},
171+
{PGP_PKA_RSA_ENCRYPT_ONLY, "RSA Encrypt-Only"},
172+
{PGP_PKA_RSA_SIGN_ONLY, "RSA Sign-Only"},
173+
{PGP_PKA_ELGAMAL, "Elgamal (Encrypt-Only)"},
174+
{PGP_PKA_DSA, "DSA"},
175+
{PGP_PKA_ECDH, "ECDH"},
176+
{PGP_PKA_ECDSA, "ECDSA"},
177+
{PGP_PKA_EDDSA, "EdDSA"},
178+
{PGP_PKA_SM2, "SM2"},
144179
#if defined(ENABLE_CRYPTO_REFRESH)
145-
{PGP_PKA_ED25519, "ED25519"},
146-
{PGP_PKA_X25519, "X25519"},
180+
{PGP_PKA_ED25519, "ED25519"},
181+
{PGP_PKA_X25519, "X25519"},
147182
#endif
148183
#if defined(ENABLE_PQC)
149-
{PGP_PKA_KYBER768_X25519, "ML-KEM-768_X25519"},
150-
//{PGP_PKA_KYBER1024_X448, "Kyber-X448"},
151-
{PGP_PKA_KYBER768_P256, "ML-KEM-768_P256"},
152-
{PGP_PKA_KYBER1024_P384, "ML-KEM-1024_P384"},
153-
{PGP_PKA_KYBER768_BP256, "ML-KEM-768_BP256"},
154-
{PGP_PKA_KYBER1024_BP384, "ML-KEM-1024_BP384"},
155-
{PGP_PKA_DILITHIUM3_ED25519, "ML-DSA-65_ED25519"},
156-
//{PGP_PKA_DILITHIUM5_ED448, "Dilithium-ED448"},
157-
{PGP_PKA_DILITHIUM3_P256, "ML-DSA-65_P256"},
158-
{PGP_PKA_DILITHIUM5_P384, "ML-DSA-87_P384"},
159-
{PGP_PKA_DILITHIUM3_BP256, "ML-DSA-65_BP256"},
160-
{PGP_PKA_DILITHIUM5_BP384, "ML-DSA-87_BP384"},
161-
{PGP_PKA_SPHINCSPLUS_SHAKE_128f, "SLH-DSA-SHAKE-128f"},
162-
{PGP_PKA_SPHINCSPLUS_SHAKE_128s, "SLH-DSA-SHAKE-128s"},
163-
{PGP_PKA_SPHINCSPLUS_SHAKE_256s, "SLH-DSA-SHAKE-256s"},
184+
{PGP_PKA_KYBER768_X25519, "ML-KEM-768_X25519"},
185+
//{PGP_PKA_KYBER1024_X448, "Kyber-X448"},
186+
{PGP_PKA_KYBER768_P256, "ML-KEM-768_P256"},
187+
{PGP_PKA_KYBER1024_P384, "ML-KEM-1024_P384"},
188+
{PGP_PKA_KYBER768_BP256, "ML-KEM-768_BP256"},
189+
{PGP_PKA_KYBER1024_BP384, "ML-KEM-1024_BP384"},
190+
{PGP_PKA_DILITHIUM3_ED25519, "ML-DSA-65_ED25519"},
191+
//{PGP_PKA_DILITHIUM5_ED448, "Dilithium-ED448"},
192+
{PGP_PKA_DILITHIUM3_P256, "ML-DSA-65_P256"},
193+
{PGP_PKA_DILITHIUM5_P384, "ML-DSA-87_P384"},
194+
{PGP_PKA_DILITHIUM3_BP256, "ML-DSA-65_BP256"},
195+
{PGP_PKA_DILITHIUM5_BP384, "ML-DSA-87_BP384"},
196+
{PGP_PKA_SPHINCSPLUS_SHAKE_128f, "SLH-DSA-SHAKE-128f"},
197+
{PGP_PKA_SPHINCSPLUS_SHAKE_128s, "SLH-DSA-SHAKE-128s"},
198+
{PGP_PKA_SPHINCSPLUS_SHAKE_256s, "SLH-DSA-SHAKE-256s"},
164199
#endif
165-
{0, NULL}};
200+
{0, NULL}};
166201

167202
bool
168203
KeygenParams::generate(pgp_key_pkt_t &seckey, bool primary)

src/lib/pgp-key.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,20 +1242,24 @@ pgp_key_t::is_pqc_alg() const
12421242
FALLTHROUGH_STATEMENT;
12431243
case PGP_PKA_KYBER768_P256:
12441244
FALLTHROUGH_STATEMENT;
1245-
case PGP_PKA_KYBER1024_P384:
1246-
FALLTHROUGH_STATEMENT;
12471245
case PGP_PKA_KYBER768_BP256:
12481246
FALLTHROUGH_STATEMENT;
1247+
case PGP_PKA_KYBER1024_X448:
1248+
FALLTHROUGH_STATEMENT;
1249+
case PGP_PKA_KYBER1024_P384:
1250+
FALLTHROUGH_STATEMENT;
12491251
case PGP_PKA_KYBER1024_BP384:
12501252
FALLTHROUGH_STATEMENT;
12511253
case PGP_PKA_DILITHIUM3_ED25519:
12521254
FALLTHROUGH_STATEMENT;
12531255
case PGP_PKA_DILITHIUM3_P256:
12541256
FALLTHROUGH_STATEMENT;
1255-
case PGP_PKA_DILITHIUM5_P384:
1256-
FALLTHROUGH_STATEMENT;
12571257
case PGP_PKA_DILITHIUM3_BP256:
12581258
FALLTHROUGH_STATEMENT;
1259+
case PGP_PKA_DILITHIUM5_ED448:
1260+
FALLTHROUGH_STATEMENT;
1261+
case PGP_PKA_DILITHIUM5_P384:
1262+
FALLTHROUGH_STATEMENT;
12591263
case PGP_PKA_DILITHIUM5_BP384:
12601264
FALLTHROUGH_STATEMENT;
12611265
case PGP_PKA_SPHINCSPLUS_SHAKE_128f:

src/librepgp/stream-dump.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,6 +1246,11 @@ stream_dump_pk_session_key(rnp_dump_ctx_t *ctx, pgp_source_t *src, pgp_dest_t *d
12461246
dst_print_vec(
12471247
dst, "x25519 encrypted session key", material.x25519.enc_sess_key, ctx->dump_mpi);
12481248
break;
1249+
case PGP_PKA_X448:
1250+
dst_print_vec(dst, "x448 ephemeral public key", material.x448.eph_key, ctx->dump_mpi);
1251+
dst_print_vec(
1252+
dst, "x448 encrypted session key", material.x448.enc_sess_key, ctx->dump_mpi);
1253+
break;
12491254
#endif
12501255
#if defined(ENABLE_PQC)
12511256
case PGP_PKA_KYBER768_X25519:

src/librepgp/stream-parse.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1589,6 +1589,8 @@ do_enforce_aes_v3pkesk(pgp_pubkey_alg_t alg)
15891589
#endif
15901590
case PGP_PKA_X25519:
15911591
return true;
1592+
case PGP_PKA_X448:
1593+
return true;
15921594
default:
15931595
return false;
15941596
}

src/tests/ffi-enc.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -836,12 +836,13 @@ TEST_F(rnp_tests, test_ffi_pqc_gen_enc_sign)
836836
std::vector<std::pair<std::string, std::string>> primary_sub = {
837837
{"ML-DSA-65+ED25519", "ML-KEM-768+X25519"},
838838
{"ML-DSA-65+ECDSA-P256", "ML-KEM-768+ECDH-P256"},
839+
{"ML-DSA-87+ED448", "ML-KEM-1024+X448"},
839840
{"ML-DSA-87+ECDSA-P384", "ML-KEM-1024+ECDH-P384"},
840841
{"ML-DSA-65+ECDSA-BP256", "ML-KEM-768+ECDH-BP256"},
841842
{"ML-DSA-87+ECDSA-BP384", "ML-KEM-1024+ECDH-BP384"},
842843
{"SLH-DSA-SHAKE-128f", "ML-KEM-768+X25519"},
843844
{"SLH-DSA-SHAKE-128s", "ML-KEM-768+X25519"},
844-
{"SLH-DSA-SHAKE-256s", "ML-KEM-768+X25519"}};
845+
{"SLH-DSA-SHAKE-256s", "ML-KEM-1024+X448"}};
845846
for (auto pk_algs : primary_sub) {
846847
rnp_ffi_t ffi = NULL;
847848
rnp_key_handle_t key = NULL;

0 commit comments

Comments
 (0)