From a9422b7297e619954023ee997165e61e1c551c98 Mon Sep 17 00:00:00 2001 From: Nickolay Olshevsky Date: Wed, 29 Jan 2025 15:21:41 +0200 Subject: [PATCH] Add more consistency to rnp_op_verify_st/rnp_op_generate_st constructors. --- src/lib/ffi-priv-types.h | 29 ++++++++++++++++++++++++++--- src/lib/rnp.cpp | 25 +++++-------------------- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/lib/ffi-priv-types.h b/src/lib/ffi-priv-types.h index 8d8688095..f118e2cd5 100644 --- a/src/lib/ffi-priv-types.h +++ b/src/lib/ffi-priv-types.h @@ -170,9 +170,23 @@ struct rnp_op_generate_st { rnp::CertParams cert; rnp::BindingParams binding; + static pgp_key_flags_t default_key_flags(pgp_pubkey_alg_t alg, bool subkey); + + /* primary key generation constructor */ rnp_op_generate_st(rnp_ffi_t affi, pgp_pubkey_alg_t alg) - : ffi(affi), keygen(alg, affi->context) + : ffi(affi), primary(true), keygen(alg, affi->context) + { + cert.flags = default_key_flags(alg, false); + cert.key_expiration = DEFAULT_KEY_EXPIRATION; + } + /* subkey generation constructor */ + rnp_op_generate_st(rnp_ffi_t affi, pgp_pubkey_alg_t alg, rnp_key_handle_t primary) + : ffi(affi), primary(false), keygen(alg, affi->context) { + binding.flags = default_key_flags(alg, true); + binding.key_expiration = DEFAULT_KEY_EXPIRATION; + primary_sec = primary->sec; + primary_pub = primary->pub; } }; @@ -231,9 +245,18 @@ struct rnp_op_verify_st { rnp_symenc_handle_t used_symenc{}; size_t encrypted_layers{}; - rnp_op_verify_st(rnp_ffi_t affi, rnp_input_t in) - : ffi(affi), input(in), rnpctx(ffi->context, ffi->key_provider, ffi->pass_provider) + /* Constructor for attached signature verification */ + rnp_op_verify_st(rnp_ffi_t affi, rnp_input_t in, rnp_output_t out) + : ffi(affi), input(in), output(out), + rnpctx(ffi->context, ffi->key_provider, ffi->pass_provider) + { + } + /* Constructor for detached signature verification */ + rnp_op_verify_st(rnp_ffi_t affi, rnp_input_t data, rnp_input_t signature) + : ffi(affi), input(signature), detached_input(data), + rnpctx(ffi->context, ffi->key_provider, ffi->pass_provider) { + rnpctx.detached = true; } ~rnp_op_verify_st(); }; diff --git a/src/lib/rnp.cpp b/src/lib/rnp.cpp index c64e13d29..d4c4a45e5 100644 --- a/src/lib/rnp.cpp +++ b/src/lib/rnp.cpp @@ -3284,9 +3284,7 @@ try { return RNP_ERROR_NULL_POINTER; } - *op = new rnp_op_verify_st(ffi, input); - (*op)->output = output; - + *op = new rnp_op_verify_st(ffi, input, output); return RNP_SUCCESS; } FFI_GUARD @@ -3301,10 +3299,7 @@ try { return RNP_ERROR_NULL_POINTER; } - *op = new rnp_op_verify_st(ffi, signature); - (*op)->rnpctx.detached = true; - (*op)->detached_input = input; - + *op = new rnp_op_verify_st(ffi, input, signature); return RNP_SUCCESS; } FFI_GUARD @@ -5014,8 +5009,8 @@ try { } FFI_GUARD -static pgp_key_flags_t -default_key_flags(pgp_pubkey_alg_t alg, bool subkey) +pgp_key_flags_t +rnp_op_generate_st::default_key_flags(pgp_pubkey_alg_t alg, bool subkey) { switch (alg) { case PGP_PKA_RSA: @@ -5090,10 +5085,6 @@ try { } *op = new rnp_op_generate_st(ffi, key_alg); - (*op)->primary = true; - (*op)->cert.flags = default_key_flags(key_alg, false); - (*op)->cert.key_expiration = DEFAULT_KEY_EXPIRATION; - return RNP_SUCCESS; } FFI_GUARD @@ -5122,13 +5113,7 @@ try { return RNP_ERROR_BAD_PARAMETERS; } - *op = new rnp_op_generate_st(ffi, key_alg); - (*op)->primary = false; - (*op)->binding.flags = default_key_flags(key_alg, true); - (*op)->binding.key_expiration = DEFAULT_KEY_EXPIRATION; - (*op)->primary_sec = primary->sec; - (*op)->primary_pub = primary->pub; - + *op = new rnp_op_generate_st(ffi, key_alg, primary); return RNP_SUCCESS; } FFI_GUARD