diff --git a/src/rnp/rnp.cpp b/src/rnp/rnp.cpp index 40a57b611..7e05d3197 100644 --- a/src/rnp/rnp.cpp +++ b/src/rnp/rnp.cpp @@ -276,10 +276,16 @@ setcmd(rnp_cfg_t *cfg, int cmd, const char *arg) switch (cmd) { case CMD_ENCRYPT: rnp_cfg_setbool(cfg, CFG_ENCRYPT_PK, true); + if (rnp_cfg_getbool(cfg, CFG_ENCRYPT_SK)) { + rnp_cfg_setint(cfg, CFG_KEYSTORE_DISABLED, 0); + } newcmd = CMD_PROTECT; break; case CMD_SYM_ENCRYPT: rnp_cfg_setbool(cfg, CFG_ENCRYPT_SK, true); + if (!rnp_cfg_getbool(cfg, CFG_ENCRYPT_PK) && !rnp_cfg_getbool(cfg, CFG_SIGN_NEEDED)) { + rnp_cfg_setint(cfg, CFG_KEYSTORE_DISABLED, 1); + } newcmd = CMD_PROTECT; break; case CMD_CLEARSIGN: @@ -288,6 +294,9 @@ setcmd(rnp_cfg_t *cfg, int cmd, const char *arg) case CMD_SIGN: rnp_cfg_setbool(cfg, CFG_NEEDSSECKEY, true); rnp_cfg_setbool(cfg, CFG_SIGN_NEEDED, true); + if (rnp_cfg_getbool(cfg, CFG_ENCRYPT_SK)) { + rnp_cfg_setint(cfg, CFG_KEYSTORE_DISABLED, 0); + } newcmd = CMD_PROTECT; break; case CMD_DECRYPT: diff --git a/src/tests/cli_tests.py b/src/tests/cli_tests.py index 86f6919d1..f41418449 100755 --- a/src/tests/cli_tests.py +++ b/src/tests/cli_tests.py @@ -1449,6 +1449,31 @@ def test_debug_log(self): run_proc(RNPK, ['--homedir', data_path('test_stream_key_load/g10'), '--list-keys', '--debug', '--all']) return + def test_pubring_loading(self): + test_dir = tempfile.mkdtemp(prefix='rnpctmp') + test_data = data_path('test_messages/message.txt') + output = path.join(test_dir, 'output') + params = ['--symmetric', '--password', 'pass', '--homedir', test_dir, test_data, '--output', output] + + ret, _, err = run_proc(RNP, ['--encrypt'] + params) + if not (ret == 2 and 'wrong pubring path' in err): + raise_err("encrypt w/o pubring didn't fail", err) + + ret, _, err = run_proc(RNP, ['--sign'] + params) + if not (ret == 2 and 'wrong pubring path' in err): + raise_err("sign w/o pubring didn't fail", err) + + ret, _, err = run_proc(RNP, ['--clearsign'] + params) + if not (ret == 2 and 'wrong pubring path' in err): + raise_err("clearsign w/o pubring didn't fail", err) + + ret, _, err = run_proc(RNP, params) + if ret != 0: + raise_err("symmetric w/o pubring failed", err) + + shutil.rmtree(test_dir) + + class Encryption(unittest.TestCase): ''' Things to try later: