aboutsummaryrefslogtreecommitdiffstats
path: root/g10/encrypt.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2017-06-20 07:25:56 +0000
committerWerner Koch <[email protected]>2017-06-23 10:01:20 +0000
commitf31dc2540acf7cd7f09fd94658e815822222bfcb (patch)
treebf921cdb81341d25575ac6895da19d53038699e2 /g10/encrypt.c
parentindent,i18n: Make some new strings translatable. Wrap too long lines. (diff)
downloadgnupg-f31dc2540acf7cd7f09fd94658e815822222bfcb.tar.gz
gnupg-f31dc2540acf7cd7f09fd94658e815822222bfcb.zip
gpg,gpgsm: Emit status code ENCRYPTION_COMPLIANCE_MODE.
* common/status.h (STATUS_ENCRYPTION_COMPLIANCE_MODE): New. * g10/encrypt.c (encrypt_crypt): Emit new status code. * sm/encrypt.c (gpgsm_encrypt): Ditto. -- This status code allows to report whether an encryption operation was compliant to de-vs. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'g10/encrypt.c')
-rw-r--r--g10/encrypt.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/g10/encrypt.c b/g10/encrypt.c
index 0d96659eb..4b21a6178 100644
--- a/g10/encrypt.c
+++ b/g10/encrypt.c
@@ -486,6 +486,7 @@ encrypt_crypt (ctrl_t ctrl, int filefd, const char *filename,
progress_filter_context_t *pfx;
PK_LIST pk_list;
int do_compress;
+ int compliant;
if (filefd != -1 && filename)
return gpg_error (GPG_ERR_INV_ARG); /* Both given. */
@@ -625,15 +626,19 @@ encrypt_crypt (ctrl_t ctrl, int filefd, const char *filename,
goto leave;
}
+ compliant = gnupg_cipher_is_compliant (CO_DE_VS, cfx.dek->algo,
+ GCRY_CIPHER_MODE_CFB);
+
{
pk_list_t pkr;
+
for (pkr = pk_list; pkr; pkr = pkr->next)
{
PKT_public_key *pk = pkr->pk;
+ unsigned int nbits = nbits_from_pk (pk);
if (! gnupg_pk_is_allowed (opt.compliance, PK_USE_ENCRYPTION,
- pk->pubkey_algo,
- pk->pkey, nbits_from_pk (pk), NULL))
+ pk->pubkey_algo, pk->pkey, nbits, NULL))
{
log_error (_("key %s not suitable for encryption"
" while in %s mode\n"),
@@ -642,9 +647,20 @@ encrypt_crypt (ctrl_t ctrl, int filefd, const char *filename,
rc = gpg_error (GPG_ERR_PUBKEY_ALGO);
goto leave;
}
+
+ if (compliant
+ && !gnupg_pk_is_compliant (CO_DE_VS, pk->pubkey_algo, pk->pkey,
+ nbits, NULL))
+ compliant = 0;
}
+
}
+ if (compliant)
+ write_status_strings (STATUS_ENCRYPTION_COMPLIANCE_MODE,
+ gnupg_status_compliance_flag (CO_DE_VS),
+ NULL);
+
cfx.dek->use_mdc = use_mdc (pk_list,cfx.dek->algo);
/* Only do the is-file-already-compressed check if we are using a
@@ -965,7 +981,8 @@ write_pubkey_enc_from_list (ctrl_t ctrl, PK_LIST pk_list, DEK *dek, iobuf_t out)
if (opt.throw_keyids && (PGP6 || PGP7 || PGP8))
{
log_info(_("you may not use %s while in %s mode\n"),
- "--throw-keyids", gnupg_compliance_option_string (opt.compliance));
+ "--throw-keyids",
+ gnupg_compliance_option_string (opt.compliance));
compliance_failure();
}