summaryrefslogtreecommitdiff
path: root/src/pkcs11.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2011-09-05 00:46:41 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2011-09-06 12:44:19 +0200
commit08de2069506b3c1e69e1fbdfe772ae5329c64c53 (patch)
tree2c20339f24eebcfed3809945c625ed2a9d4b30a2 /src/pkcs11.c
parentab782d356200f44736edb687304d5e90438e2185 (diff)
downloadgnutls-08de2069506b3c1e69e1fbdfe772ae5329c64c53.tar.gz
Added gnutls_pkcs11_privkey_generate().
p11tool can be used to generate keys in tokens.
Diffstat (limited to 'src/pkcs11.c')
-rw-r--r--src/pkcs11.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/pkcs11.c b/src/pkcs11.c
index 8a7420440b..b0693da214 100644
--- a/src/pkcs11.c
+++ b/src/pkcs11.c
@@ -546,6 +546,39 @@ pkcs11_write (FILE * outfile, const char *url, const char *label,
}
void
+pkcs11_generate (FILE * outfile, const char *url, gnutls_pk_algorithm_t pk,
+ unsigned int bits,
+ const char *label, int private, int detailed,
+ unsigned int login, common_info_st * info)
+{
+ int ret;
+ unsigned int flags = 0;
+
+ if (login)
+ flags = GNUTLS_PKCS11_OBJ_FLAG_LOGIN;
+
+ pkcs11_common ();
+
+ if (url == NULL)
+ url = "pkcs11:";
+
+ if (private == 1)
+ flags |= GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE;
+ else if (private == 0)
+ flags |= GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_PRIVATE;
+
+ ret = gnutls_pkcs11_privkey_generate(url, pk, bits, label, flags);
+ if (ret < 0)
+ {
+ fprintf (stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
+ gnutls_strerror (ret));
+ exit(1);
+ }
+
+ return;
+}
+
+void
pkcs11_init (FILE * outfile, const char *url, const char *label,
common_info_st * info)
{