]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
tests: refactor pkcs11-privkey-generate
authorDaiki Ueno <ueno@gnu.org>
Thu, 28 Sep 2023 02:37:15 +0000 (11:37 +0900)
committerDaiki Ueno <ueno@gnu.org>
Thu, 28 Sep 2023 21:51:56 +0000 (06:51 +0900)
This factors out key generation logic into a separate function so we
can easily extend the test to cover more key types.

Signed-off-by: Daiki Ueno <ueno@gnu.org>
tests/pkcs11/pkcs11-privkey-generate.c

index 0409ad3a523d6e3e421b265c98c5714ba86f74d2..e9e8fcbf88a57be671cd51b8c4c799e7a98b9ccc 100644 (file)
@@ -77,14 +77,60 @@ static int pin_func(void *userdata, int attempt, const char *url,
        return 0;
 }
 
+static void generate_keypair(gnutls_pk_algorithm_t algo, size_t bits,
+                            const char *name, bool sensitive)
+{
+       gnutls_datum_t out;
+       unsigned int flags;
+       gnutls_pkcs11_obj_t obj;
+       char buf[128];
+       int ret;
+
+       flags = GNUTLS_PKCS11_OBJ_FLAG_LOGIN;
+       if (!sensitive) {
+               flags |= GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE;
+       }
+
+       ret = gnutls_pkcs11_privkey_generate3("pkcs11:token=test", algo, bits,
+                                             name, NULL, GNUTLS_X509_FMT_DER,
+                                             &out, 0, flags);
+       if (ret < 0) {
+               fail("%d: %s\n", ret, gnutls_strerror(ret));
+       }
+
+       success("generated %s key (%s)\n",
+               gnutls_pk_get_name(algo),
+               sensitive ? "sensitive" : "non sensitive");
+
+       assert(gnutls_pkcs11_obj_init(&obj) >= 0);
+       assert(out.size > 0);
+
+       gnutls_pkcs11_obj_set_pin_function(obj, pin_func, NULL);
+       assert(snprintf(buf, sizeof(buf),
+                       "pkcs11:token=test;object=%s;type=private",
+                       name) < (int)sizeof(buf));
+       assert(gnutls_pkcs11_obj_import_url(obj, buf,
+                                           GNUTLS_PKCS11_OBJ_FLAG_LOGIN) >= 0);
+
+       assert(gnutls_pkcs11_obj_get_flags(obj, &flags) >= 0);
+
+       if (sensitive) {
+               assert(!(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE));
+               assert(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE);
+       } else {
+               assert(!(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE));
+               assert(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE);
+       }
+
+       gnutls_free(out.data);
+       gnutls_pkcs11_obj_deinit(obj);
+}
+
 void doit(void)
 {
        char buf[128];
        int ret;
        const char *lib, *bin;
-       gnutls_datum_t out;
-       unsigned flags;
-       gnutls_pkcs11_obj_t obj;
 
        if (gnutls_fips140_mode_enabled())
                exit(77);
@@ -124,94 +170,17 @@ void doit(void)
 
        gnutls_pkcs11_set_pin_function(pin_func, NULL);
 
-       /* generate sensitive */
-       ret = gnutls_pkcs11_privkey_generate3("pkcs11:token=test",
-                                             GNUTLS_PK_RSA, 2048, "testkey",
-                                             NULL, GNUTLS_X509_FMT_DER, &out,
-                                             0, GNUTLS_PKCS11_OBJ_FLAG_LOGIN);
-       if (ret < 0) {
-               fail("%d: %s\n", ret, gnutls_strerror(ret));
-               exit(1);
-       }
-
-       success("generated RSA key\n");
-
-       assert(gnutls_pkcs11_obj_init(&obj) >= 0);
-       assert(out.size > 0);
-
-       gnutls_pkcs11_obj_set_pin_function(obj, pin_func, NULL);
-       assert(gnutls_pkcs11_obj_import_url(
-                      obj, "pkcs11:token=test;object=testkey;type=private",
-                      GNUTLS_PKCS11_OBJ_FLAG_LOGIN) >= 0);
-
-       assert(gnutls_pkcs11_obj_get_flags(obj, &flags) >= 0);
-
-       assert(!(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE));
-       assert(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE);
-
-       gnutls_free(out.data);
-       gnutls_pkcs11_obj_deinit(obj);
-
-       /* generate non-sensitive */
-       ret = gnutls_pkcs11_privkey_generate3(
-               "pkcs11:token=test", GNUTLS_PK_RSA, 2048, "testkey2", NULL,
-               GNUTLS_X509_FMT_DER, &out, 0,
-               GNUTLS_PKCS11_OBJ_FLAG_LOGIN |
-                       GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE);
-       if (ret < 0) {
-               fail("%d: %s\n", ret, gnutls_strerror(ret));
-               exit(1);
-       }
-
-       success("generated RSA key (non-sensitive)\n");
-
-       assert(gnutls_pkcs11_obj_init(&obj) >= 0);
-       assert(out.size > 0);
-
-       gnutls_pkcs11_obj_set_pin_function(obj, pin_func, NULL);
-       assert(gnutls_pkcs11_obj_import_url(
-                      obj, "pkcs11:token=test;object=testkey2;type=private",
-                      GNUTLS_PKCS11_OBJ_FLAG_LOGIN) >= 0);
-
-       assert(gnutls_pkcs11_obj_get_flags(obj, &flags) >= 0);
-
-       assert(!(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE));
-       assert(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE);
-
-       gnutls_free(out.data);
-       gnutls_pkcs11_obj_deinit(obj);
+       generate_keypair(GNUTLS_PK_RSA, 2048, "rsa-sensitive", true);
+       generate_keypair(GNUTLS_PK_RSA, 2048, "rsa-non-sensitive", false);
 
 #ifdef CKM_EC_EDWARDS_KEY_PAIR_GEN
        ret = gnutls_pkcs11_token_check_mechanism(
                "pkcs11:token=test", CKM_EC_EDWARDS_KEY_PAIR_GEN, NULL, 0, 0);
        if (ret != 0) {
-               ret = gnutls_pkcs11_privkey_generate3(
-                       "pkcs11:token=test", GNUTLS_PK_EDDSA_ED25519, 256,
-                       "testkey-ed25519", NULL, GNUTLS_X509_FMT_DER, &out, 0,
-                       GNUTLS_PKCS11_OBJ_FLAG_LOGIN);
-               if (ret < 0) {
-                       fail("%d: %s\n", ret, gnutls_strerror(ret));
-                       exit(1);
-               }
-
-               success("generated Ed25519 key\n");
-
-               assert(gnutls_pkcs11_obj_init(&obj) >= 0);
-               assert(out.size > 0);
-
-               gnutls_pkcs11_obj_set_pin_function(obj, pin_func, NULL);
-               assert(gnutls_pkcs11_obj_import_url(
-                              obj,
-                              "pkcs11:token=test;object=testkey-ed25519;type=private",
-                              GNUTLS_PKCS11_OBJ_FLAG_LOGIN) >= 0);
-
-               assert(gnutls_pkcs11_obj_get_flags(obj, &flags) >= 0);
-
-               assert(!(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE));
-               assert(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE);
-
-               gnutls_free(out.data);
-               gnutls_pkcs11_obj_deinit(obj);
+               generate_keypair(GNUTLS_PK_EDDSA_ED25519, 256,
+                                "ed25519-sensitive", true);
+               generate_keypair(GNUTLS_PK_EDDSA_ED25519, 256,
+                                "ed25519-non-sensitive", false);
        }
 #endif