seahorse r2305 - in trunk: . pkcs11 src



Author: nnielsen
Date: Sat Jul 26 18:37:08 2008
New Revision: 2305
URL: http://svn.gnome.org/viewvc/seahorse?rev=2305&view=rev

Log:
	* pkcs11/gp11.vapi:
	* pkcs11/Makefile.am:
	* pkcs11/p11.vapi: (added)
	* pkcs11/seahorse-pkcs11.vala:
	* bugs.vapi: Add functions for converting from a seahorse object
	id (quark) to a set of attributes that uniquely identifies a
	PKCS#11 object.


Added:
   trunk/pkcs11/p11.vapi
Modified:
   trunk/ChangeLog
   trunk/bugs.vapi
   trunk/pkcs11/Makefile.am
   trunk/pkcs11/gp11.vapi
   trunk/pkcs11/seahorse-pkcs11.c
   trunk/pkcs11/seahorse-pkcs11.h
   trunk/pkcs11/seahorse-pkcs11.vala
   trunk/pkcs11/vala-build.stamp
   trunk/src/vala-build.stamp

Modified: trunk/bugs.vapi
==============================================================================
--- trunk/bugs.vapi	(original)
+++ trunk/bugs.vapi	Sat Jul 26 18:37:08 2008
@@ -20,4 +20,8 @@
 	/* http://bugzilla.gnome.org/show_bug.cgi?id=540713 */
 	[CCode (cname="gtk_notebook_page_num")]
 	public int notebook_page_num (Gtk.Notebook notebook, Gtk.Widget widget);
+	
+	/* http://bugzilla.gnome.org/show_bug.cgi?id=544871 */
+	[CCode (cname="g_base64_encode")]
+	public string base64_encode (uchar* data, size_t length);
 }

Modified: trunk/pkcs11/Makefile.am
==============================================================================
--- trunk/pkcs11/Makefile.am	(original)
+++ trunk/pkcs11/Makefile.am	Sat Jul 26 18:37:08 2008
@@ -19,6 +19,9 @@
 	seahorse-pkcs11.vala
 	
 VALA_VAPIS = \
+	p11.vapi \
+	gp11.vapi \
+	$(top_srcdir)/bugs.vapi \
 	$(top_srcdir)/config.vapi \
 	$(top_srcdir)/libseahorse/libseahorse-c.vapi \
 	$(top_srcdir)/libseahorse/libseahorse.vapi

Modified: trunk/pkcs11/gp11.vapi
==============================================================================
--- trunk/pkcs11/gp11.vapi	(original)
+++ trunk/pkcs11/gp11.vapi	Sat Jul 26 18:37:08 2008
@@ -9,30 +9,40 @@
 	
 	[CCode (dup_function = "gp11_attribute_dup", free_function = "gp11_attribute_free")]
 	public class Attribute {
+		public ulong type;
+		
+		/* 
+		 * BUG: This should really be defined as uchar[], however vala does 
+		 * not yet support assigning names to the length parameter of an 
+		 * array 
+		 */ 
+		public uchar* value;
+		public ulong length;
+				
 		public Attribute.new_boolean (uint attr_type, bool val);
 		public Attribute.new_date (uint attr_type, GLib.Date date);
 		public Attribute.new_ulong (uint attr_type, ulong val);
 		public Attribute.new_string (uint attr_type, string val);
-		public uint type { get; }
+		public Attribute(uint attr_type, uchar[] value);
 		public bool get_boolean();
 		public ulong get_ulong();
 		public string get_string();
-		public void get_data(out void* data, out ulong length);
+		public void get_data(out uchar* data, out ulong length);
 	}
 
 	[CCode (ref_function = "gp11_attributes_ref", unref_function = "gp11_attributes_unref")]
 	public class Attributes {
-		public Attribute (void);
+		public Attributes ();
 		public bool immutable { get; }
 		public uint count { get; }
 		public Attribute at(uint index);
 		public void add(Attribute attr);
-		public void add_data(uint attr_type, void* data, gulong length);
+		public void add_data(uint attr_type, uchar[] value);
 		public void add_boolean(uint attr_type, bool val);
 		public void add_date (uint attr_type, GLib.Date date);
 		public void add_ulong (uint attr_type, ulong val);
 		public void add_string (uint attr_type, string val);
-		public Attribute? find(uint attr_type);
+		public weak Attribute? find(uint attr_type);
 		public bool find_boolean(uint attr_type, out bool val);
 		public bool find_ulong(uint attr_type, out ulong val);
 		public bool find_string(uint attr_type, out string val);
@@ -50,8 +60,8 @@
 		public uint library_version_minor;
 	}
 
-	public class Module : Glib.Object {
-		public static Module initialize(string path) throws GLib.Error;
+	public class Module : GLib.Object {
+		public static Module initialize(string path, void* reserved) throws GLib.Error;
 
 		public ModuleInfo info { get; }
 		public GLib.List<Slot> get_slots();
@@ -90,22 +100,39 @@
 		public uint firmware_version_minor;
 		public uint64 utc_time;
 	}
+	
+	[CCode (dup_function = "gp11_mechanism_info_dup", free_function = "gp11_mechanism_info_free")]
+	public class MechanismInfo {
+		public ulong min_key_size;
+		public ulong max_key_size;
+		public uint flags;
+	}
 
-	public class Slot : Glib.Object {
+	public class Slot : GLib.Object {
+		public signal bool authenticate_token (Slot slot, out string password);
+	
 		public weak Module module { get; }
 		public uint handle { get; }
 		public SlotInfo info { get; }
 		public TokenInfo token_info { get; }
+		public bool auto_login { get; set; }
+		public bool reuse_sesions { get; set; }
+		
 
 		public GLib.List<uint> get_mechanisms();
 		public MechanismInfo get_mechanism_info();
 		
 		[CCode (cname = "gp11_slot_open_session_full")]
-		public Session open_session(uint flags, GLib.Cancellable cancellable = null) throws GLib.Error;
-		public void open_session_async(uint flags, GLib.Cancellable cancellable, GLib.AsyncReadyCallback callback);
+		public Session open_session(uint flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public void open_session_async(uint flags, GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
 		public Session open_session_finish(GLib.AsyncResult result) throws GLib.Error;
 	}
 
+	public class Mechanism {
+		public ulong type;
+		public uchar[] parameters;
+	}
+
 	[CCode (dup_function = "gp11_session_info_dup", free_function = "gp11_session_info_free")]
 	public class SessionInfo {
 		public ulong slot_id;
@@ -114,35 +141,35 @@
 		public ulong device_error;
 	}
 
-	public class Session : Glib.Object {
+	public class Session : GLib.Object {
 		public static Session from_handle(Slot slot, uint handle);
-
+		
 		public weak Module module { get; }
 		public uint handle { get; }
 		public SessionInfo info { get; }
 		
 		[CCode (cname = "gp11_session_login_full")]
-		public void login(guint user_type, uchar[] pin, ulong pin_length, GLib.Cancellable cancellable = null) throws GLib.Error;
-		public void login_async(guint user_type, uchar[] pin, ulong pin_length, GLib.Cancellable cancellable, GLib.AsyncReadyCallback callback);
+		public void login(uint user_type, uchar[] pin, ulong pin_length, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public void login_async(uint user_type, uchar[] pin, ulong pin_length, GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
 		public void login_finish(GLib.AsyncResult result) throws GLib.Error;
 
 		[CCode (cname = "gp11_session_logout_full")]
-		public void logout(GLib.Cancellable cancellable = null) throws GLib.Error;
-		public void logout_async(GLib.Cancellable cancellable, GLib.AsyncReadyCallback callback);
+		public void logout(GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public void logout_async(GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
 		public void logout_finish(GLib.AsyncResult result) throws GLib.Error;
 
 		[CCode (cname = "gp11_session_create_object_full")]
-		public Object create_object(Attributes attrs, GLib.Cancellable cancellable = null) throws GLib.Error;
-		public void create_object_async(Attributes attrs, GLib.Cancellable cancellable, GLib.AsyncReadyCallback callback);
+		public Object create_object(Attributes attrs, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public void create_object_async(Attributes attrs, GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
 		public Object create_object_finish(GLib.AsyncResult result) throws GLib.Error;
 		
 		[CCode (cname = "gp11_session_find_objects_full")]
-		public GLib.List<Object> find_objects(Attributes attrs, GLib.Cancellable cancellable = null) throws GLib.Error;
-		public void find_objects_async(Attributes attrs, GLib.Cancellable cancellable, GLib.AsyncReadyCallback callback);
+		public GLib.List<Object> find_objects(Attributes attrs, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public void find_objects_async(Attributes attrs, GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
 		public GLib.List<Object> find_objects_finish(GLib.AsyncResult result) throws GLib.Error;
 	}
 
-	public class Object : Glib.Object {
+	public class Object : GLib.Object {
 		public static Object from_handle(Session session, uint handle);
 		
 		public weak Module module { get; }
@@ -150,28 +177,28 @@
 		public uint handle { get; }
 
 		[CCode (cname = "gp11_object_destroy_full")]
-		public void destroy(GLib.Cancellable cancellable = null) throws GLib.Error;
-		public void destroy_async(GLib.Cancellable cancellable, GLib.AsyncReadyCallback callback);
+		public void destroy(GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public void destroy_async(GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
 		public void destroy_finish(GLib.AsyncResult result) throws GLib.Error;
 
 		[CCode (cname = "gp11_object_set_full")]
-		public void set_attributes(Attributes attrs, GLib.Cancellable cancellable = null) throws GLib.Error;
+		public void set_attributes(Attributes attrs, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[CCode (cname = "gp11_object_set_async")]
-		public void set_attributes_async(Attributes attrs, GLib.Cancellable cancellable, GLib.AsyncReadyCallback callback);
+		public void set_attributes_async(Attributes attrs, GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
 		[CCode (cname = "gp11_object_set_finish")]
 		public void set_attributes_finish(GLib.AsyncResult result) throws GLib.Error;
 
 		[CCode (cname = "gp11_object_get_full")]
-		public Attributes get_attributes(guint[] attr_types, GLib.Cancellable cancellable = null) throws GLib.Error;
+		public Attributes get_attributes(uint[] attr_types, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[CCode (cname = "gp11_object_get_async")]
-		public void get_attributes_async(guint[] attr_types, GLib.Cancellable cancellable, GLib.AsyncReadyCallback callback);
+		public void get_attributes_async(uint[] attr_types, GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
 		[CCode (cname = "gp11_object_get_finish")]
 		public Attributes get_attributes_finish(GLib.AsyncResult result) throws GLib.Error;
 		
 		[CCode (cname = "gp11_object_get_one_full")]
-		public Attribute get_attribute(guint attr_type, GLib.Cancellable cancellable = null) throws GLib.Error;
+		public Attribute get_attribute(uint attr_type, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[CCode (cname = "gp11_object_get_one_async")]
-		public void get_attribute_async(guint attr_type, GLib.Cancellable cancellable, GLib.AsyncReadyCallback callback);
+		public void get_attribute_async(uint attr_type, GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
 		[CCode (cname = "gp11_object_get_one_finish")]
 		public Attribute get_attribute_finish(GLib.AsyncResult result) throws GLib.Error;
 	}

Added: trunk/pkcs11/p11.vapi
==============================================================================
--- (empty file)
+++ trunk/pkcs11/p11.vapi	Sat Jul 26 18:37:08 2008
@@ -0,0 +1,11 @@
+
+[CCode (cheader_filename = "pkcs11.h", cprefix = "", lower_case_cprefix = "")] 
+namespace P11 {
+	const uint CKA_CLASS;
+	const uint CKA_ID;
+	
+	const ulong CKO_DATA;
+	const ulong CKO_CERTIFICATE;
+	const ulong CKO_PRIVATE_KEY;
+	const ulong CKO_PUBLIC_KEY;
+}

Modified: trunk/pkcs11/seahorse-pkcs11.c
==============================================================================
--- trunk/pkcs11/seahorse-pkcs11.c	(original)
+++ trunk/pkcs11/seahorse-pkcs11.c	Sat Jul 26 18:37:08 2008
@@ -22,11 +22,171 @@
 #include "seahorse-pkcs11.h"
 #include <stdlib.h>
 #include <string.h>
+#include <pkcs11.h>
 
 
 
 
-
+static char* seahorse_pkcs11_klass_to_string (gulong klass);
+static gulong seahorse_pkcs11_string_to_klass (const char* str);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+
+GQuark seahorse_pkcs11_id_from_attributes (GP11Attributes* attrs) {
+	gulong klass;
+	GP11Attribute* attr;
+	char* _tmp3;
+	char* _tmp2;
+	char* _tmp4;
+	char* value;
+	GQuark _tmp5;
+	g_return_val_if_fail (attrs != NULL, 0U);
+	/* These cases should have been covered by the programmer */
+	klass = 0UL;
+	if (!gp11_attributes_find_ulong (attrs, CKA_CLASS, &klass)) {
+		g_warning ("seahorse-pkcs11.vala:36: Cannot create object id. PKCS#11 attribute set did not contain CKA_CLASS.");
+		return ((GQuark) (0));
+	}
+	attr = gp11_attributes_find (attrs, CKA_ID);
+	if (attr == NULL) {
+		g_warning ("seahorse-pkcs11.vala:42: Cannot create object id. PKCS#11 attribute set did not contain CKA_ID");
+		return ((GQuark) (0));
+	}
+	_tmp3 = NULL;
+	_tmp2 = NULL;
+	_tmp4 = NULL;
+	value = (_tmp4 = g_strdup_printf ("%s:%s/%s", SEAHORSE_PKCS11_TYPE_STR, (_tmp2 = seahorse_pkcs11_klass_to_string (klass)), (_tmp3 = g_base64_encode (attr->value, ((gsize) (attr->length))))), (_tmp3 = (g_free (_tmp3), NULL)), (_tmp2 = (g_free (_tmp2), NULL)), _tmp4);
+	return (_tmp5 = g_quark_from_string (value), (value = (g_free (value), NULL)), _tmp5);
+}
+
+
+gboolean seahorse_pkcs11_id_to_attributes (GQuark id, GP11Attributes* attrs) {
+	const char* value;
+	char** _tmp1;
+	gint parts_length1;
+	char** parts;
+	gulong klass;
+	gsize len;
+	guchar* _tmp4;
+	gint ckid_length1;
+	guchar* ckid;
+	gboolean _tmp6;
+	g_return_val_if_fail (attrs != NULL, FALSE);
+	if (id == 0) {
+		return FALSE;
+	}
+	value = g_quark_to_string (id);
+	_tmp1 = NULL;
+	parts = (_tmp1 = g_strsplit_set (value, ":/", 3), parts_length1 = -1, _tmp1);
+	if (parts_length1 != 3 || _vala_strcmp0 (parts[0], SEAHORSE_PKCS11_TYPE_STR) != 0) {
+		gboolean _tmp2;
+		return (_tmp2 = FALSE, (parts = (_vala_array_free (parts, parts_length1, ((GDestroyNotify) (g_free))), NULL)), _tmp2);
+	}
+	klass = seahorse_pkcs11_string_to_klass (parts[1]);
+	if (klass == -1) {
+		gboolean _tmp3;
+		return (_tmp3 = FALSE, (parts = (_vala_array_free (parts, parts_length1, ((GDestroyNotify) (g_free))), NULL)), _tmp3);
+	}
+	len = 0UL;
+	_tmp4 = NULL;
+	ckid = (_tmp4 = g_base64_decode (parts[2], &len), ckid_length1 = -1, _tmp4);
+	if (ckid == NULL) {
+		gboolean _tmp5;
+		return (_tmp5 = FALSE, (parts = (_vala_array_free (parts, parts_length1, ((GDestroyNotify) (g_free))), NULL)), (ckid = (g_free (ckid), NULL)), _tmp5);
+	}
+	gp11_attributes_add_data (attrs, CKA_ID, ckid, ckid_length1);
+	gp11_attributes_add_ulong (attrs, CKA_CLASS, klass);
+	return (_tmp6 = TRUE, (parts = (_vala_array_free (parts, parts_length1, ((GDestroyNotify) (g_free))), NULL)), (ckid = (g_free (ckid), NULL)), _tmp6);
+}
+
+
+static char* seahorse_pkcs11_klass_to_string (gulong klass) {
+	gulong _tmp5;
+	_tmp5 = klass;
+	if (_tmp5 == CKO_DATA)
+	do {
+		return g_strdup ("data");
+	} while (0); else if (_tmp5 == CKO_CERTIFICATE)
+	do {
+		return g_strdup ("certificate");
+	} while (0); else if (_tmp5 == CKO_PRIVATE_KEY)
+	do {
+		return g_strdup ("private-key");
+	} while (0); else if (_tmp5 == CKO_PUBLIC_KEY)
+	do {
+		return g_strdup ("public-key");
+	} while (0); else
+	do {
+		return g_strdup_printf ("%lu", klass);
+	} while (0);
+}
+
+
+static gulong seahorse_pkcs11_string_to_klass (const char* str) {
+	g_return_val_if_fail (str != NULL, 0UL);
+	if (_vala_strcmp0 (str, "data") == 0) {
+		return CKO_DATA;
+	} else {
+		if (_vala_strcmp0 (str, "certificate") == 0) {
+			return CKO_CERTIFICATE;
+		} else {
+			if (_vala_strcmp0 (str, "private-key") == 0) {
+				return CKO_PRIVATE_KEY;
+			} else {
+				if (_vala_strcmp0 (str, "public-key") == 0) {
+					return CKO_PUBLIC_KEY;
+				} else {
+					char* end;
+					char* _tmp6;
+					gulong _tmp5;
+					char* _tmp4;
+					gulong ret;
+					gulong _tmp8;
+					end = NULL;
+					_tmp6 = NULL;
+					_tmp4 = NULL;
+					ret = (_tmp5 = strtoul (str, &_tmp4, 0), end = (_tmp6 = _tmp4, (end = (g_free (end), NULL)), _tmp6), _tmp5);
+					if (g_utf8_strlen (end, -1) > 0) {
+						gulong _tmp7;
+						g_warning ("seahorse-pkcs11.vala:101: unrecognized and unparsable PKCS#11 class: %s", str);
+						return (_tmp7 = ((gulong) (-1)), (end = (g_free (end), NULL)), _tmp7);
+					}
+					return (_tmp8 = ret, (end = (g_free (end), NULL)), _tmp8);
+				}
+			}
+		}
+	}
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+	if (array != NULL && destroy_func != NULL) {
+		int i;
+		if (array_length >= 0)
+		for (i = 0; i < array_length; i = i + 1) {
+			if (((gpointer*) (array))[i] != NULL)
+			destroy_func (((gpointer*) (array))[i]);
+		}
+		else
+		for (i = 0; ((gpointer*) (array))[i] != NULL; i = i + 1) {
+			destroy_func (((gpointer*) (array))[i]);
+		}
+	}
+	g_free (array);
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+	if (str1 == NULL) {
+		return -(str1 != str2);
+	}
+	if (str2 == NULL) {
+		return (str1 != str2);
+	}
+	return strcmp (str1, str2);
+}
 
 
 

Modified: trunk/pkcs11/seahorse-pkcs11.h
==============================================================================
--- trunk/pkcs11/seahorse-pkcs11.h	(original)
+++ trunk/pkcs11/seahorse-pkcs11.h	Sat Jul 26 18:37:08 2008
@@ -24,6 +24,7 @@
 
 #include <glib.h>
 #include <glib-object.h>
+#include <gp11.h>
 
 G_BEGIN_DECLS
 
@@ -31,7 +32,8 @@
 
 #define SEAHORSE_PKCS11_TYPE_STR "pkcs11"
 #define SEAHORSE_PKCS11_TYPE g_quark_from_string ("pkcs11")
-#define SEAHORSE_PKCS11_STOCK_ICON "seahorse-key"
+GQuark seahorse_pkcs11_id_from_attributes (GP11Attributes* attrs);
+gboolean seahorse_pkcs11_id_to_attributes (GQuark id, GP11Attributes* attrs);
 
 
 G_END_DECLS

Modified: trunk/pkcs11/seahorse-pkcs11.vala
==============================================================================
--- trunk/pkcs11/seahorse-pkcs11.vala	(original)
+++ trunk/pkcs11/seahorse-pkcs11.vala	Sat Jul 26 18:37:08 2008
@@ -20,11 +20,89 @@
  */
 
 using GLib;
+using GP11;
 
 namespace Seahorse.Pkcs11 {
-	public static const string TYPE_STR = "pkcs11";
-	public static const Quark TYPE = Quark.from_string("pkcs11");
 	
-	/* TODO: This is dumb and needs to change */
-	public static const string STOCK_ICON = "seahorse-key";
+	public const string TYPE_STR = "pkcs11";
+	public const Quark TYPE = Quark.from_string("pkcs11");
+	
+	public GLib.Quark id_from_attributes (GP11.Attributes attrs) {
+		
+		/* These cases should have been covered by the programmer */
+		
+		ulong klass;
+		if (!attrs.find_ulong(P11.CKA_CLASS, out klass)) {
+			GLib.warning("Cannot create object id. PKCS#11 attribute set did not contain CKA_CLASS.");
+			return 0;
+		}
+
+		weak GP11.Attribute? attr = attrs.find(P11.CKA_ID);
+		if (attr == null) {
+			GLib.warning("Cannot create object id. PKCS#11 attribute set did not contain CKA_ID");
+			return 0;
+		}
+
+		string value = "%s:%s/%s".printf(TYPE_STR, klass_to_string(klass), Bugs.base64_encode(attr.value, attr.length));
+		return Quark.from_string(value);
+	}
+	
+	public bool id_to_attributes (GLib.Quark id, GP11.Attributes attrs) {
+		if(id == 0)
+			return false;
+		
+		weak string value = id.to_string(); 
+		string[] parts = value.split_set(":/", 3);
+		if (parts.length != 3 || parts[0] != TYPE_STR)
+			return false;
+		
+		ulong klass = string_to_klass(parts[1]);
+		if (klass == -1)
+			return false;
+		
+		size_t len;
+		uchar[] ckid = GLib.Base64.decode(parts[2], out len);
+		if (ckid == null)
+			return false;
+		
+		attrs.add_data(P11.CKA_ID, ckid);
+		attrs.add_ulong(P11.CKA_CLASS, klass);
+		return true;
+	}
+	
+	private string klass_to_string(ulong klass) {
+		switch (klass) {
+		case P11.CKO_DATA:
+			return "data";
+		case P11.CKO_CERTIFICATE:
+			return "certificate";
+		case P11.CKO_PRIVATE_KEY:
+			return "private-key";
+		case P11.CKO_PUBLIC_KEY:
+			return "public-key";
+		default:
+			return "%lu".printf(klass);
+		}
+	}
+	
+	private ulong string_to_klass(string str) {
+		if (str == "data")
+			return P11.CKO_DATA;
+		else if (str == "certificate")
+			return P11.CKO_CERTIFICATE;
+		else if (str == "private-key")
+			return P11.CKO_PRIVATE_KEY;
+		else if (str == "public-key")
+			return P11.CKO_PUBLIC_KEY;
+		else {
+			string end;
+			ulong ret = str.to_ulong(out end);
+			if (end.len() > 0) {
+				GLib.warning("unrecognized and unparsable PKCS#11 class: %s", str);
+				return -1;
+			}
+			return ret;
+		}
+	}
+	
 }

Modified: trunk/pkcs11/vala-build.stamp
==============================================================================
--- trunk/pkcs11/vala-build.stamp	(original)
+++ trunk/pkcs11/vala-build.stamp	Sat Jul 26 18:37:08 2008
@@ -1 +1 @@
-1216678933
+1217097084

Modified: trunk/src/vala-build.stamp
==============================================================================
--- trunk/src/vala-build.stamp	(original)
+++ trunk/src/vala-build.stamp	Sat Jul 26 18:37:08 2008
@@ -1 +1 @@
-1216679108
+1217097103



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]