From 23a6d43242398990e7fc46d3044883299803aafc Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Wed, 9 Nov 2011 16:46:19 +0100 Subject: [PATCH] gck: Allow generating key without getting out key objects * Allow public_key and private_key locations to be null in gck_session_generate_key_pair(), -gck_session_generate_key_pair_full() and gck_session_generate_key_pair_finish() --- gck/gck-session.c | 50 +++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/gck/gck-session.c b/gck/gck-session.c index a08be84..3f59ea5 100644 --- a/gck/gck-session.c +++ b/gck/gck-session.c @@ -1835,8 +1835,8 @@ perform_generate_key_pair (GenerateKeyPair *args) * @mech_type: The mechanism type to use for key generation. * @public_attrs: Additional attributes for the generated public key. * @private_attrs: Additional attributes for the generated private key. - * @public_key: A location to return the resulting public key. - * @private_key: A location to return the resulting private key. + * @public_key: (allow-none) (out): location to return the resulting public key + * @private_key: (allow-none) (out): location to return the resulting private key. * @cancellable: Optional cancellation object, or NULL. * @error: A location to return an error, or NULL. * @@ -1861,8 +1861,8 @@ gck_session_generate_key_pair (GckSession *self, gulong mech_type, * @mechanism: The mechanism to use for key generation. * @public_attrs: Additional attributes for the generated public key. * @private_attrs: Additional attributes for the generated private key. - * @public_key: A location to return the resulting public key. - * @private_key: A location to return the resulting private key. + * @public_key: (allow-none) (out): a location to return the resulting public key + * @private_key: (allow-none) (out): a location to return the resulting private key * @cancellable: Optional cancellation object, or NULL. * @error: A location to return an error, or NULL. * @@ -1872,10 +1872,14 @@ gck_session_generate_key_pair (GckSession *self, gulong mech_type, * Return value: TRUE if the operation succeeded. **/ gboolean -gck_session_generate_key_pair_full (GckSession *self, GckMechanism *mechanism, - GckAttributes *public_attrs, GckAttributes *private_attrs, - GckObject **public_key, GckObject **private_key, - GCancellable *cancellable, GError **error) +gck_session_generate_key_pair_full (GckSession *self, + GckMechanism *mechanism, + GckAttributes *public_attrs, + GckAttributes *private_attrs, + GckObject **public_key, + GckObject **private_key, + GCancellable *cancellable, + GError **error) { GenerateKeyPair args = { GCK_ARGUMENTS_INIT, GCK_MECHANISM_EMPTY, public_attrs, private_attrs, 0, 0 }; gboolean ret; @@ -1884,8 +1888,6 @@ gck_session_generate_key_pair_full (GckSession *self, GckMechanism *mechanism, g_return_val_if_fail (mechanism, FALSE); g_return_val_if_fail (public_attrs, FALSE); g_return_val_if_fail (private_attrs, FALSE); - g_return_val_if_fail (public_key, FALSE); - g_return_val_if_fail (private_key, FALSE); /* Shallow copy of the mechanism structure */ memcpy (&args.mechanism, mechanism, sizeof (args.mechanism)); @@ -1901,8 +1903,10 @@ gck_session_generate_key_pair_full (GckSession *self, GckMechanism *mechanism, if (!ret) return FALSE; - *public_key = gck_object_from_handle (self, args.public_key); - *private_key = gck_object_from_handle (self, args.private_key); + if (public_key) + *public_key = gck_object_from_handle (self, args.public_key); + if (private_key) + *private_key = gck_object_from_handle (self, args.private_key); return TRUE; } @@ -1949,8 +1953,8 @@ gck_session_generate_key_pair_async (GckSession *self, GckMechanism *mechanism, * gck_session_generate_key_pair_finish: * @self: The session to use. * @result: The async result passed to the callback. - * @public_key: A location to return the resulting public key. - * @private_key: A location to return the resulting private key. + * @public_key: (allow-none): a location to return the resulting public key + * @private_key: (allow-none): a location to return the resulting private key * @error: A location to return an error. * * Get the result of a generate key pair operation. @@ -1958,15 +1962,17 @@ gck_session_generate_key_pair_async (GckSession *self, GckMechanism *mechanism, * Return value: TRUE if the operation succeeded. **/ gboolean -gck_session_generate_key_pair_finish (GckSession *self, GAsyncResult *result, - GckObject **public_key, GckObject **private_key, - GError **error) +gck_session_generate_key_pair_finish (GckSession *self, + GAsyncResult *result, + GckObject **public_key, + GckObject **private_key, + GError **error) { GenerateKeyPair *args; g_return_val_if_fail (GCK_IS_SESSION (self), FALSE); - g_return_val_if_fail (public_key, FALSE); - g_return_val_if_fail (private_key, FALSE); + g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); args = _gck_call_arguments (result, GenerateKeyPair); _gck_attributes_unlock (args->public_attrs); @@ -1976,8 +1982,10 @@ gck_session_generate_key_pair_finish (GckSession *self, GAsyncResult *result, if (!_gck_call_basic_finish (result, error)) return FALSE; - *public_key = gck_object_from_handle (self, args->public_key); - *private_key = gck_object_from_handle (self, args->private_key); + if (public_key) + *public_key = gck_object_from_handle (self, args->public_key); + if (private_key) + *private_key = gck_object_from_handle (self, args->private_key); return TRUE; } -- 2.7.4