aboutsummaryrefslogtreecommitdiffstats
path: root/common/compliance.c
diff options
context:
space:
mode:
authorJustus Winter <[email protected]>2017-06-19 09:00:04 +0000
committerJustus Winter <[email protected]>2017-06-19 09:00:04 +0000
commit6e23416fe61d4130918f2d1bf6e1f98d102c4610 (patch)
tree0fa8951fd4f6d121cb74e61c44afce304f845b3e /common/compliance.c
parentgpg: Check and fix keys on import. (diff)
downloadgnupg-6e23416fe61d4130918f2d1bf6e1f98d102c4610.tar.gz
gnupg-6e23416fe61d4130918f2d1bf6e1f98d102c4610.zip
gpg: Disable compliance module for other GnuPG components.
* common/compliance.c (gnupg_{pk,cipher,digest}_is_compliant): Return false if the module is not initialized. (gnupg_{pk,cipher,digest}_is_allowed): Return true if the module is not initialized. (gnupg_status_compliance_flag): Do not assert that the module is initialized. (gnupg_parse_compliance_option): Likewise. (gnupg_compliance_option_string): Likewise. -- This implements a default policy for modules not explicitly using the compliance module. The default policy is to allow all algorithms, but mark none of them as compliant. Fixes gpgv. GnuPG-bug-id: 3210 Signed-off-by: Justus Winter <[email protected]>
Diffstat (limited to 'common/compliance.c')
-rw-r--r--common/compliance.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/common/compliance.c b/common/compliance.c
index b19112c3a..2662273d9 100644
--- a/common/compliance.c
+++ b/common/compliance.c
@@ -100,7 +100,8 @@ gnupg_pk_is_compliant (enum gnupg_compliance_mode compliance, int algo,
enum { is_rsa, is_dsa, is_pgp5, is_elg_sign, is_ecc } algotype;
int result = 0;
- log_assert (initialized);
+ if (! initialized)
+ return 0;
switch (algo)
{
@@ -202,6 +203,9 @@ gnupg_pk_is_allowed (enum gnupg_compliance_mode compliance,
enum pk_use_case use, int algo, gcry_mpi_t key[],
unsigned int keylength, const char *curvename)
{
+ if (! initialized)
+ return 1;
+
switch (compliance)
{
case CO_DE_VS:
@@ -298,7 +302,8 @@ gnupg_cipher_is_compliant (enum gnupg_compliance_mode compliance,
cipher_algo_t cipher,
enum gcry_cipher_modes mode)
{
- log_assert (initialized);
+ if (! initialized)
+ return 0;
switch (compliance)
{
@@ -340,6 +345,9 @@ gnupg_cipher_is_allowed (enum gnupg_compliance_mode compliance, int producer,
cipher_algo_t cipher,
enum gcry_cipher_modes mode)
{
+ if (! initialized)
+ return 1;
+
switch (compliance)
{
case CO_DE_VS:
@@ -386,7 +394,8 @@ gnupg_cipher_is_allowed (enum gnupg_compliance_mode compliance, int producer,
int
gnupg_digest_is_compliant (enum gnupg_compliance_mode compliance, digest_algo_t digest)
{
- log_assert (initialized);
+ if (! initialized)
+ return 0;
switch (compliance)
{
@@ -418,6 +427,9 @@ int
gnupg_digest_is_allowed (enum gnupg_compliance_mode compliance, int producer,
digest_algo_t digest)
{
+ if (! initialized)
+ return 1;
+
switch (compliance)
{
case CO_DE_VS:
@@ -450,8 +462,6 @@ gnupg_digest_is_allowed (enum gnupg_compliance_mode compliance, int producer,
const char *
gnupg_status_compliance_flag (enum gnupg_compliance_mode compliance)
{
- log_assert (initialized);
-
switch (compliance)
{
case CO_GNUPG:
@@ -482,8 +492,6 @@ gnupg_parse_compliance_option (const char *string,
{
size_t i;
- log_assert (initialized);
-
if (! ascii_strcasecmp (string, "help"))
{
log_info (_ ("valid values for option '%s':\n"), "--compliance");
@@ -507,8 +515,6 @@ gnupg_parse_compliance_option (const char *string,
const char *
gnupg_compliance_option_string (enum gnupg_compliance_mode compliance)
{
- log_assert (initialized);
-
switch (compliance)
{
case CO_GNUPG: return "--compliance=gnupg";