static void gcr_secret_exchange_finalize (GObject *obj) { GcrSecretExchange *self = GCR_SECRET_EXCHANGE (obj); if (self->pv->destroy_exchange) (self->pv->destroy_exchange) (self->pv->default_exchange); clear_secret_exchange (self); G_OBJECT_CLASS (gcr_secret_exchange_parent_class)->finalize (obj); }
/** * gcr_secret_exchange_begin: * @self: a #GcrSecretExchange object * * Begin the secret exchange. The resulting string should be sent to the other * side of the exchange. The other side should use gcr_secret_exchange_receive() * to process the string. * * Returns: (transfer full): A newly allocated string to be sent to the other * side of the secret exchange */ gchar * gcr_secret_exchange_begin (GcrSecretExchange *self) { GcrSecretExchangeClass *klass; GKeyFile *output; gchar *result; g_return_val_if_fail (GCR_IS_SECRET_EXCHANGE (self), NULL); klass = GCR_SECRET_EXCHANGE_GET_CLASS (self); g_return_val_if_fail (klass->generate_exchange_key, NULL); clear_secret_exchange (self); output = g_key_file_new (); if (!(klass->generate_exchange_key) (self, GCR_SECRET_EXCHANGE_PROTOCOL_1, &self->pv->publi, &self->pv->n_publi)) g_return_val_if_reached (NULL); self->pv->generated = TRUE; key_file_set_base64 (output, GCR_SECRET_EXCHANGE_PROTOCOL_1, "public", self->pv->publi, self->pv->n_publi); result = g_key_file_to_data (output, NULL, NULL); g_return_val_if_fail (result != NULL, NULL); g_strchug (result); gchar *string = g_strescape (result, ""); g_debug ("beginning the secret exchange: %s", string); g_free (string); if (!g_str_has_prefix (result, SECRET_EXCHANGE_PROTOCOL_1_PREFIX)) g_warning ("the prepared data does not have the correct protocol prefix"); g_key_file_free (output); return result; }