libqaeda

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | README | LICENSE

commit 52e141c3b456e6a6179f56b3e1ab6597cdc44e56
parent 14fd772bf8b43266b6ac9c09092f94a98f44f810
Author: lash <dev@holbrook.no>
Date:   Sat,  3 May 2025 19:13:42 +0100

Differentiate between decrypt fail and create

Diffstat:
Msrc/crypto/gcrypt.c | 13++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/crypto/gcrypt.c b/src/crypto/gcrypt.c @@ -29,6 +29,13 @@ enum gpg_find_mode_e { GPG_FIND_FINGERPRINT, ///< Load only the key matching the fingerprint. }; +/// TODO: move create mode to lq/crypto settings +#ifdef GPG_NOCREATE +static enum gpg_find_mode_e default_mode = GPG_FIND_MAIN; +#else +static enum gpg_find_mode_e default_mode = GPG_FIND_ORCREATE; +#endif + extern char zeros[65]; /** @@ -735,6 +742,10 @@ static int gpg_key_load(struct gpg_store *gpg, const char *passphrase, size_t pa if (r == ERR_OK) { break; } + if (r != ERR_NOENT) { + debug(LLOG_INFO, "gpg", "default decrypt failed"); + break; + } // if no key could be loaded, attempt to create one. if (!lq_cmp(gpg_fingerprint_zero, gpg->fingerprint, LQ_FP_LEN)) { debug(LLOG_DEBUG, "gpg", "default private key not found, attempting create new"); @@ -784,7 +795,7 @@ LQPrivKey* lq_privatekey_load(const char *passphrase, size_t passphrase_len, con } lq_zero(pk->impl, sizeof(struct gpg_store)); gpg = (struct gpg_store*)pk->impl; - m = GPG_FIND_ORCREATE; + m = default_mode; if (fingerprint != NULL) { lq_cpy(gpg->fingerprint, fingerprint, LQ_FP_LEN); m = GPG_FIND_FINGERPRINT;