diff options
Diffstat (limited to 'src/tests/user-prefs.cpp')
-rw-r--r-- | src/tests/user-prefs.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/tests/user-prefs.cpp b/src/tests/user-prefs.cpp new file mode 100644 index 0000000..9681307 --- /dev/null +++ b/src/tests/user-prefs.cpp @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2017-2019 [Ribose Inc](https://www.ribose.com). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "rnp.h" +#include <rekey/rnp_key_store.h> +#include "rnp_tests.h" +#include "support.h" +#include "pgp-key.h" + +static const pgp_subsig_t * +find_subsig(const pgp_key_t *key, const char *userid) +{ + // find the userid index + int uididx = -1; + for (unsigned i = 0; i < key->uid_count(); i++) { + if (key->get_uid(i).str == userid) { + uididx = i; + break; + } + } + if (uididx == -1) { + return NULL; + } + // find the subsig index + for (size_t i = 0; i < key->sig_count(); i++) { + const pgp_subsig_t &subsig = key->get_sig(i); + if ((int) subsig.uid == uididx) { + return &subsig; + } + } + return NULL; +} + +TEST_F(rnp_tests, test_load_user_prefs) +{ + rnp_key_store_t *pubring = + new rnp_key_store_t(PGP_KEY_STORE_GPG, "data/keyrings/1/pubring.gpg", global_ctx); + assert_true(rnp_key_store_load_from_path(pubring, NULL)); + assert_int_equal(rnp_key_store_get_key_count(pubring), 7); + + { + const char *userid = "key1-uid0"; + + // find the key + pgp_key_t *key = NULL; + assert_non_null(key = rnp_tests_key_search(pubring, userid)); + + const pgp_subsig_t *subsig = find_subsig(key, userid); + assert_non_null(subsig); + + const pgp_user_prefs_t &prefs = subsig->prefs; + + // symm algs + std::vector<uint8_t> expected = {PGP_SA_AES_192, PGP_SA_CAST5}; + assert_true(prefs.symm_algs == expected); + // hash algs + expected = {PGP_HASH_SHA1, PGP_HASH_SHA224}; + assert_true(prefs.hash_algs == expected); + // compression algs + expected = {PGP_C_ZIP, PGP_C_NONE}; + assert_true(prefs.z_algs == expected); + // key server prefs + expected = {PGP_KEY_SERVER_NO_MODIFY}; + assert_true(prefs.ks_prefs == expected); + // preferred key server + assert_string_equal(prefs.key_server.c_str(), "hkp://pgp.mit.edu"); + } + + { + const char *userid = "key0-uid0"; + + // find the key + pgp_key_t *key = NULL; + assert_non_null(key = rnp_tests_key_search(pubring, userid)); + + const pgp_subsig_t *subsig = find_subsig(key, userid); + assert_non_null(subsig); + + const pgp_user_prefs_t &prefs = subsig->prefs; + // symm algs + std::vector<uint8_t> expected = {PGP_SA_AES_256, + PGP_SA_AES_192, + PGP_SA_AES_128, + PGP_SA_CAST5, + PGP_SA_TRIPLEDES, + PGP_SA_IDEA}; + assert_true(prefs.symm_algs == expected); + // hash algs + expected = { + PGP_HASH_SHA256, PGP_HASH_SHA1, PGP_HASH_SHA384, PGP_HASH_SHA512, PGP_HASH_SHA224}; + assert_true(prefs.hash_algs == expected); + // compression algs + expected = {PGP_C_ZLIB, PGP_C_BZIP2, PGP_C_ZIP}; + assert_true(prefs.z_algs == expected); + // key server prefs + expected = {PGP_KEY_SERVER_NO_MODIFY}; + assert_true(prefs.ks_prefs == expected); + // preferred key server + assert_true(prefs.key_server.empty()); + } + + /* Cleanup */ + delete pubring; +} |