diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2011-09-05 00:46:41 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2011-09-06 12:44:19 +0200 |
commit | 08de2069506b3c1e69e1fbdfe772ae5329c64c53 (patch) | |
tree | 2c20339f24eebcfed3809945c625ed2a9d4b30a2 /src/pkcs11.c | |
parent | ab782d356200f44736edb687304d5e90438e2185 (diff) | |
download | gnutls-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.c | 33 |
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) { |