On 04/01/2011 10:20 AM, Lucian Horga wrote:
+    aegis_crypto_signature_to_string (&signature,
+                                      aegis_as_base64,
+                                      token,
+&signature_string);
+    aegis_crypto_finish ();

      sgn = g_slice_new (AgSignature);
-    sgn->signature = data; //signed_data;
+    sgn->signature = g_strdup (signature_string);
+    g_free (signature_string);

signature_string has been allocated by aegis_crypto, so to free it you shouldn't use g_free, but some other function provided by that library.

@@ -2219,12 +2247,19 @@ ag_account_sign (AgAccount *account, const gchar *key, 
const gchar *token)
  gboolean
  ag_account_verify (AgAccount *account, const gchar *key, const gchar **token)
  {
+#ifdef HAVE_AEGISCRYPTO
      AgAccountPrivate *priv;
      AgServiceSettings *ss;
      guint service_id;
      gchar *data;
      gchar *sql;
      AgSignature sgn;
+    GString *sql_str;
+    aegis_system_mode_t made_in_mode;
+    aegis_crypto_result result_verify;
+    aegis_crypto_result result_convert;
+    struct aegis_signature_t signature;
+    char *token_name;

      g_return_val_if_fail (AG_IS_ACCOUNT (account), FALSE);

@@ -2235,7 +2270,7 @@ ag_account_verify (AgAccount *account, const gchar *key, 
const gchar **token)

      service_id = (priv->service != NULL) ? priv->service->id : 0;

-    GString *sql_str;
+
      sql_str = g_string_sized_new (512);
      _ag_string_append_printf (sql_str,
                                "SELECT signature, token FROM Signatures "
@@ -2246,16 +2281,48 @@ ag_account_verify (AgAccount *account, const gchar 
*key, const gchar **token)
[...]
+    result_convert =  aegis_crypto_string_to_signature (sgn.signature,
+&signature,
+&token_name);
+
+    if (result_convert != aegis_crypto_ok) {
+        *token = NULL;
+        aegis_crypto_finish();
+        g_free (data);
+        return FALSE;
+    }
+
+    result_verify = aegis_crypto_verify (&signature,
+                                         token_name,
+                                         data,
+                                         strlen (data),
+&made_in_mode);
+
+    if (result_verify != aegis_crypto_ok) {
+        *token = NULL;
+        aegis_crypto_finish ();
+        g_free (data);
+        return FALSE;

I just noticed now, that also here you need to free the token_name.

+    }
+
+    *token = g_strdup (token_name);
+    if (token_name)
+       free(token_name);

Again, use a function from aegis_crypto.

Ciao,
  Alberto

--
http://blog.mardy.it <-- geek in un lingua international!
_______________________________________________
MeeGo-dev mailing list
[email protected]
http://lists.meego.com/listinfo/meego-dev
http://wiki.meego.com/Mailing_list_guidelines

Reply via email to