From: Nikos Mavrogiannopoulos Date: Sun, 13 Mar 2011 17:07:52 +0000 (+0100) Subject: added gnutls_key_generate() to API. X-Git-Tag: gnutls_2_99_0~122 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df7d8850afcd11ffa0801ace3f3c742f92327317;p=thirdparty%2Fgnutls.git added gnutls_key_generate() to API. --- diff --git a/lib/crypto-api.c b/lib/crypto-api.c index b5f6cc52bb..f7f200c2f8 100644 --- a/lib/crypto-api.c +++ b/lib/crypto-api.c @@ -28,6 +28,7 @@ #include #include #include +#include #include /** @@ -457,3 +458,40 @@ gnutls_hash_fast (gnutls_digest_algorithm_t algorithm, { return _gnutls_hash_fast (algorithm, text, textlen, digest); } + +/** + * gnutls_key_generate: + * @key: is a pointer to a #gnutls_datum_t which will contain a newly + * created key. + * @key_size: The number of bytes of the key. + * + * Generates a random key of @key_bytes size. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, or an + * error code. + * + * Since: 3.0.0 + **/ +int +gnutls_key_generate (gnutls_datum_t * key, unsigned int key_size) +{ + int ret; + + key->size = key_size; + key->data = gnutls_malloc (key->size); + if (!key->data) + { + gnutls_assert (); + return GNUTLS_E_MEMORY_ERROR; + } + + ret = _gnutls_rnd (GNUTLS_RND_RANDOM, key->data, key->size); + if (ret < 0) + { + gnutls_assert (); + _gnutls_free_datum (key); + return ret; + } + + return 0; +} diff --git a/lib/ext_session_ticket.c b/lib/ext_session_ticket.c index f2c36ade76..92a2c93808 100644 --- a/lib/ext_session_ticket.c +++ b/lib/ext_session_ticket.c @@ -480,25 +480,7 @@ error: int gnutls_session_ticket_key_generate (gnutls_datum_t * key) { - int ret; - - key->size = SESSION_KEY_SIZE; - key->data = gnutls_malloc (key->size); - if (!key->data) - { - gnutls_assert (); - return GNUTLS_E_MEMORY_ERROR; - } - - ret = _gnutls_rnd (GNUTLS_RND_RANDOM, key->data, key->size); - if (ret < 0) - { - gnutls_assert (); - _gnutls_free_datum (key); - return ret; - } - - return 0; + return gnutls_key_generate(key, SESSION_KEY_SIZE); } /** diff --git a/lib/includes/gnutls/gnutls.h.in b/lib/includes/gnutls/gnutls.h.in index 7e70a33fe0..5933f4d4c7 100644 --- a/lib/includes/gnutls/gnutls.h.in +++ b/lib/includes/gnutls/gnutls.h.in @@ -847,6 +847,8 @@ extern "C" int gnutls_session_ticket_enable_server (gnutls_session_t session, const gnutls_datum_t * key); + int gnutls_key_generate (gnutls_datum_t * key, unsigned int key_size); + /* if you just want some defaults, use the following. */ int gnutls_priority_init (gnutls_priority_t * priority_cache, @@ -1711,6 +1713,7 @@ extern "C" #define GNUTLS_E_CRYPTODEV_DEVICE_ERROR -212 #define GNUTLS_E_CHANNEL_BINDING_NOT_AVAILABLE -213 +#define GNUTLS_E_BAD_COOKIE -214 /* PKCS11 related */ #define GNUTLS_E_PKCS11_ERROR -300