besser82 / rpms / pidgin

Forked from rpms/pidgin 6 years ago
Clone
David Woodhouse 6087050
David Woodhouse 6087050
# HG changeset patch
David Woodhouse 6087050
# User Jakub Adam <jakub.adam@ktknet.cz>
David Woodhouse 6087050
# Date 1426122329 0
David Woodhouse 6087050
# Node ID a0906e7a6bae86f1251d8369b30ba82a9daf1836
David Woodhouse 6087050
# Parent  fcecf7f838e266dc2c3bfd306df58ade3fc3ac93
David Woodhouse 6087050
Implement media encryption
David Woodhouse 6087050
David Woodhouse 6087050
diff --git a/libpurple/media.c b/libpurple/media.c
David Woodhouse 6087050
--- a/libpurple/media.c
David Woodhouse 6087050
+++ b/libpurple/media.c
David Woodhouse 6087050
@@ -1276,6 +1276,34 @@
David Woodhouse 6087050
 }
David Woodhouse 6087050
 
David Woodhouse 6087050
 gboolean
David Woodhouse 6087050
+purple_media_set_encryption_parameters(PurpleMedia *media, const gchar *sess_id,
David Woodhouse 6087050
+		const gchar *cipher, const gchar *auth,
David Woodhouse 6087050
+		const gchar *key, gsize key_len)
David Woodhouse 6087050
+{
David Woodhouse 6087050
+#ifdef USE_VV
David Woodhouse 6087050
+	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
David Woodhouse 6087050
+	return purple_media_backend_set_encryption_parameters(media->priv->backend,
David Woodhouse 6087050
+			sess_id, cipher, auth, key, key_len);
David Woodhouse 6087050
+#else
David Woodhouse 6087050
+	return FALSE;
David Woodhouse 6087050
+#endif
David Woodhouse 6087050
+}
David Woodhouse 6087050
+
David Woodhouse 6087050
+gboolean
David Woodhouse 6087050
+purple_media_set_decryption_parameters(PurpleMedia *media, const gchar *sess_id,
David Woodhouse 6087050
+		const gchar *participant, const gchar *cipher,
David Woodhouse 6087050
+		const gchar *auth, const gchar *key, gsize key_len)
David Woodhouse 6087050
+{
David Woodhouse 6087050
+#ifdef USE_VV
David Woodhouse 6087050
+	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
David Woodhouse 6087050
+	return purple_media_backend_set_decryption_parameters(media->priv->backend,
David Woodhouse 6087050
+			sess_id, participant, cipher, auth, key, key_len);
David Woodhouse 6087050
+#else
David Woodhouse 6087050
+	return FALSE;
David Woodhouse 6087050
+#endif
David Woodhouse 6087050
+}
David Woodhouse 6087050
+
David Woodhouse 6087050
+gboolean
David Woodhouse 6087050
 purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id)
David Woodhouse 6087050
 {
David Woodhouse 6087050
 #ifdef USE_VV
David Woodhouse 6087050
diff --git a/libpurple/media.h b/libpurple/media.h
David Woodhouse 6087050
--- a/libpurple/media.h
David Woodhouse 6087050
+++ b/libpurple/media.h
David Woodhouse 6087050
@@ -349,6 +349,43 @@
David Woodhouse 6087050
 gboolean purple_media_set_send_codec(PurpleMedia *media, const gchar *sess_id, PurpleMediaCodec *codec);
David Woodhouse 6087050
 
David Woodhouse 6087050
 /**
David Woodhouse 6087050
+ * Sets the encryption parameters of our media in the session.
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * @param media The media object to find the session in.
David Woodhouse 6087050
+ * @param sess_id The session id of the session to set parameters of.
David Woodhouse 6087050
+ * @param cipher The cipher to use to encrypt our media in the session.
David Woodhouse 6087050
+ * @param auth The algorithm to use to compute authentication codes for our
David Woodhouse 6087050
+ *        media frames.
David Woodhouse 6087050
+ * @param key The encryption key.
David Woodhouse 6087050
+ * @param key_len Byte length of the encryption key.
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * @since 2.11.0
David Woodhouse 6087050
+ */
David Woodhouse 6087050
+gboolean purple_media_set_encryption_parameters(PurpleMedia *media,
David Woodhouse 6087050
+		const gchar *sess_id, const gchar *cipher,
David Woodhouse 6087050
+		const gchar *auth, const gchar *key, gsize key_len);
David Woodhouse 6087050
+
David Woodhouse 6087050
+/**
David Woodhouse 6087050
+ * Sets the decryption parameters for a session participant's media.
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * @param media The media object to find the session in.
David Woodhouse 6087050
+ * @param sess_id The session id of the session to set parameters of.
David Woodhouse 6087050
+ * @param participant The participant of the session to set parameters of.
David Woodhouse 6087050
+ * @param cipher The cipher to use to decrypt media coming from this session's
David Woodhouse 6087050
+ *          participant.
David Woodhouse 6087050
+ * @param auth The algorithm to use for authentication of the media coming
David Woodhouse 6087050
+ *        from the session's participant.
David Woodhouse 6087050
+ * @param key The decryption key.
David Woodhouse 6087050
+ * @param key_len Byte length of the decryption key.
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * @since 2.11.0
David Woodhouse 6087050
+ */
David Woodhouse 6087050
+gboolean purple_media_set_decryption_parameters(PurpleMedia *media,
David Woodhouse 6087050
+		const gchar *sess_id, const gchar *participant,
David Woodhouse 6087050
+		const gchar *cipher, const gchar *auth,
David Woodhouse 6087050
+		const gchar *key, gsize key_len);
David Woodhouse 6087050
+
David Woodhouse 6087050
+/**
David Woodhouse 6087050
  * Gets whether a session's codecs are ready to be used.
David Woodhouse 6087050
  *
David Woodhouse 6087050
  * @param media The media object to find the session in.
David Woodhouse 6087050
diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c
David Woodhouse 6087050
--- a/libpurple/media/backend-fs2.c
David Woodhouse 6087050
+++ b/libpurple/media/backend-fs2.c
David Woodhouse 6087050
@@ -85,6 +85,15 @@
David Woodhouse 6087050
 static GList *purple_media_backend_fs2_get_local_candidates(
David Woodhouse 6087050
 		PurpleMediaBackend *self,
David Woodhouse 6087050
 		const gchar *sess_id, const gchar *participant);
David Woodhouse 6087050
+#if GST_CHECK_VERSION(1,0,0)
David Woodhouse 6087050
+static gboolean purple_media_backend_fs2_set_encryption_parameters (
David Woodhouse 6087050
+	PurpleMediaBackend *self, const gchar *sess_id, const gchar *cipher,
David Woodhouse 6087050
+	const gchar *auth, const gchar *key, gsize key_len);
David Woodhouse 6087050
+static gboolean purple_media_backend_fs2_set_decryption_parameters(
David Woodhouse 6087050
+		PurpleMediaBackend *self, const gchar *sess_id,
David Woodhouse 6087050
+		const gchar *participant, const gchar *cipher,
David Woodhouse 6087050
+		const gchar *auth, const gchar *key, gsize key_len);
David Woodhouse 6087050
+#endif
David Woodhouse 6087050
 static gboolean purple_media_backend_fs2_set_remote_codecs(
David Woodhouse 6087050
 		PurpleMediaBackend *self,
David Woodhouse 6087050
 		const gchar *sess_id, const gchar *participant,
David Woodhouse 6087050
@@ -545,6 +554,12 @@
David Woodhouse 6087050
 			purple_media_backend_fs2_get_local_candidates;
David Woodhouse 6087050
 	iface->set_remote_codecs = purple_media_backend_fs2_set_remote_codecs;
David Woodhouse 6087050
 	iface->set_send_codec = purple_media_backend_fs2_set_send_codec;
David Woodhouse 6087050
+#if GST_CHECK_VERSION(1,0,0)
David Woodhouse 6087050
+	iface->set_encryption_parameters =
David Woodhouse 6087050
+			purple_media_backend_fs2_set_encryption_parameters;
David Woodhouse 6087050
+	iface->set_decryption_parameters =
David Woodhouse 6087050
+			purple_media_backend_fs2_set_decryption_parameters;
David Woodhouse 6087050
+#endif
David Woodhouse 6087050
 	iface->set_params = purple_media_backend_fs2_set_params;
David Woodhouse 6087050
 	iface->get_available_params = purple_media_backend_fs2_get_available_params;
David Woodhouse 6087050
 	iface->send_dtmf = purple_media_backend_fs2_send_dtmf;
David Woodhouse 6087050
@@ -2471,6 +2486,97 @@
David Woodhouse 6087050
 	return TRUE;
David Woodhouse 6087050
 }
David Woodhouse 6087050
 
David Woodhouse 6087050
+#if GST_CHECK_VERSION(1,0,0)
David Woodhouse 6087050
+static GstStructure *
David Woodhouse 6087050
+create_fs2_srtp_structure(const gchar *cipher, const gchar *auth,
David Woodhouse 6087050
+	const gchar *key, gsize key_len)
David Woodhouse 6087050
+{
David Woodhouse 6087050
+	GstStructure *result;
David Woodhouse 6087050
+	GstBuffer *buffer;
David Woodhouse 6087050
+	GstMapInfo info;
David Woodhouse 6087050
+
David Woodhouse 6087050
+	buffer = gst_buffer_new_allocate(NULL, key_len, NULL);
David Woodhouse 6087050
+	gst_buffer_map(buffer, &info, GST_MAP_WRITE);
David Woodhouse 6087050
+	memcpy(info.data, key, key_len);
David Woodhouse 6087050
+	gst_buffer_unmap(buffer, &info;;
David Woodhouse 6087050
+
David Woodhouse 6087050
+	result = gst_structure_new("FarstreamSRTP",
David Woodhouse 6087050
+			"cipher", G_TYPE_STRING, cipher,
David Woodhouse 6087050
+			"auth", G_TYPE_STRING, auth,
David Woodhouse 6087050
+			"key", GST_TYPE_BUFFER, buffer,
David Woodhouse 6087050
+			NULL);
David Woodhouse 6087050
+	gst_buffer_unref(buffer);
David Woodhouse 6087050
+
David Woodhouse 6087050
+	return result;
David Woodhouse 6087050
+}
David Woodhouse 6087050
+
David Woodhouse 6087050
+static gboolean
David Woodhouse 6087050
+purple_media_backend_fs2_set_encryption_parameters (PurpleMediaBackend *self,
David Woodhouse 6087050
+		const gchar *sess_id, const gchar *cipher, const gchar *auth,
David Woodhouse 6087050
+		const gchar *key, gsize key_len)
David Woodhouse 6087050
+{
David Woodhouse 6087050
+	PurpleMediaBackendFs2Session *session;
David Woodhouse 6087050
+	GstStructure *srtp;
David Woodhouse 6087050
+	GError *err = NULL;
David Woodhouse 6087050
+	gboolean result;
David Woodhouse 6087050
+
David Woodhouse 6087050
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
David Woodhouse 6087050
+
David Woodhouse 6087050
+	session = get_session(PURPLE_MEDIA_BACKEND_FS2(self), sess_id);
David Woodhouse 6087050
+	if (!session)
David Woodhouse 6087050
+		return FALSE;
David Woodhouse 6087050
+
David Woodhouse 6087050
+	srtp = create_fs2_srtp_structure(cipher, auth, key, key_len);
David Woodhouse 6087050
+	if (!srtp)
David Woodhouse 6087050
+		return FALSE;
David Woodhouse 6087050
+
David Woodhouse 6087050
+	result = fs_session_set_encryption_parameters(session->session, srtp,
David Woodhouse 6087050
+						&err;;
David Woodhouse 6087050
+	if (!result) {
David Woodhouse 6087050
+		purple_debug_error("backend-fs2",
David Woodhouse 6087050
+				"Error setting encryption parameters: %s\n", err->message);
David Woodhouse 6087050
+		g_error_free(err);
David Woodhouse 6087050
+	}
David Woodhouse 6087050
+
David Woodhouse 6087050
+	gst_structure_free(srtp);
David Woodhouse 6087050
+	return result;
David Woodhouse 6087050
+}
David Woodhouse 6087050
+
David Woodhouse 6087050
+static gboolean
David Woodhouse 6087050
+purple_media_backend_fs2_set_decryption_parameters (PurpleMediaBackend *self,
David Woodhouse 6087050
+		const gchar *sess_id, const gchar *participant,
David Woodhouse 6087050
+		const gchar *cipher, const gchar *auth,
David Woodhouse 6087050
+		const gchar *key, gsize key_len)
David Woodhouse 6087050
+{
David Woodhouse 6087050
+	PurpleMediaBackendFs2Stream *stream;
David Woodhouse 6087050
+	GstStructure *srtp;
David Woodhouse 6087050
+	GError *err = NULL;
David Woodhouse 6087050
+	gboolean result;
David Woodhouse 6087050
+
David Woodhouse 6087050
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
David Woodhouse 6087050
+
David Woodhouse 6087050
+	stream = get_stream(PURPLE_MEDIA_BACKEND_FS2(self), sess_id,
David Woodhouse 6087050
+			participant);
David Woodhouse 6087050
+	if (!stream)
David Woodhouse 6087050
+		return FALSE;
David Woodhouse 6087050
+
David Woodhouse 6087050
+	srtp = create_fs2_srtp_structure(cipher, auth, key, key_len);
David Woodhouse 6087050
+	if (!srtp)
David Woodhouse 6087050
+		return FALSE;
David Woodhouse 6087050
+
David Woodhouse 6087050
+	result = fs_stream_set_decryption_parameters(stream->stream, srtp,
David Woodhouse 6087050
+						&err;;
David Woodhouse 6087050
+	if (!result) {
David Woodhouse 6087050
+		purple_debug_error("backend-fs2",
David Woodhouse 6087050
+				"Error setting decryption parameters: %s\n", err->message);
David Woodhouse 6087050
+		g_error_free(err);
David Woodhouse 6087050
+	}
David Woodhouse 6087050
+
David Woodhouse 6087050
+	gst_structure_free(srtp);
David Woodhouse 6087050
+	return result;
David Woodhouse 6087050
+}
David Woodhouse 6087050
+#endif /* GST 1.0+ */
David Woodhouse 6087050
+
David Woodhouse 6087050
 static gboolean
David Woodhouse 6087050
 purple_media_backend_fs2_set_send_codec(PurpleMediaBackend *self,
David Woodhouse 6087050
 		const gchar *sess_id, PurpleMediaCodec *codec)
David Woodhouse 6087050
diff --git a/libpurple/media/backend-iface.c b/libpurple/media/backend-iface.c
David Woodhouse 6087050
--- a/libpurple/media/backend-iface.c
David Woodhouse 6087050
+++ b/libpurple/media/backend-iface.c
David Woodhouse 6087050
@@ -193,6 +193,35 @@
David Woodhouse 6087050
 			sess_id, codec);
David Woodhouse 6087050
 }
David Woodhouse 6087050
 
David Woodhouse 6087050
+gboolean
David Woodhouse 6087050
+purple_media_backend_set_encryption_parameters(PurpleMediaBackend *self,
David Woodhouse 6087050
+		const gchar *sess_id, const gchar *cipher,
David Woodhouse 6087050
+		const gchar *auth, const gchar *key, gsize key_len)
David Woodhouse 6087050
+{
David Woodhouse 6087050
+	PurpleMediaBackendIface *backend_iface;
David Woodhouse 6087050
+
David Woodhouse 6087050
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), FALSE);
David Woodhouse 6087050
+	backend_iface = PURPLE_MEDIA_BACKEND_GET_INTERFACE(self);
David Woodhouse 6087050
+	g_return_val_if_fail(backend_iface->set_encryption_parameters, FALSE);
David Woodhouse 6087050
+	return backend_iface->set_encryption_parameters(self,
David Woodhouse 6087050
+			sess_id, cipher, auth, key, key_len);
David Woodhouse 6087050
+}
David Woodhouse 6087050
+
David Woodhouse 6087050
+gboolean
David Woodhouse 6087050
+purple_media_backend_set_decryption_parameters(PurpleMediaBackend *self,
David Woodhouse 6087050
+		const gchar *sess_id, const gchar *participant,
David Woodhouse 6087050
+		const gchar *cipher, const gchar *auth,
David Woodhouse 6087050
+		const gchar *key, gsize key_len)
David Woodhouse 6087050
+{
David Woodhouse 6087050
+	PurpleMediaBackendIface *backend_iface;
David Woodhouse 6087050
+
David Woodhouse 6087050
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), FALSE);
David Woodhouse 6087050
+	backend_iface = PURPLE_MEDIA_BACKEND_GET_INTERFACE(self);
David Woodhouse 6087050
+	g_return_val_if_fail(backend_iface->set_decryption_parameters, FALSE);
David Woodhouse 6087050
+	return backend_iface->set_decryption_parameters(self,
David Woodhouse 6087050
+			sess_id, participant, cipher, auth, key, key_len);
David Woodhouse 6087050
+}
David Woodhouse 6087050
+
David Woodhouse 6087050
 void
David Woodhouse 6087050
 purple_media_backend_set_params(PurpleMediaBackend *self,
David Woodhouse 6087050
 		guint num_params, GParameter *params)
David Woodhouse 6087050
diff --git a/libpurple/media/backend-iface.h b/libpurple/media/backend-iface.h
David Woodhouse 6087050
--- a/libpurple/media/backend-iface.h
David Woodhouse 6087050
+++ b/libpurple/media/backend-iface.h
David Woodhouse 6087050
@@ -68,6 +68,13 @@
David Woodhouse 6087050
 		GList *codecs);
David Woodhouse 6087050
 	gboolean (*set_send_codec) (PurpleMediaBackend *self,
David Woodhouse 6087050
 		const gchar *sess_id, PurpleMediaCodec *codec);
David Woodhouse 6087050
+	gboolean (*set_encryption_parameters) (PurpleMediaBackend *self,
David Woodhouse 6087050
+		const gchar *sess_id, const gchar *cipher,
David Woodhouse 6087050
+		const gchar *auth, const gchar *key, gsize key_len);
David Woodhouse 6087050
+	gboolean (*set_decryption_parameters) (PurpleMediaBackend *self,
David Woodhouse 6087050
+		const gchar *sess_id, const gchar *participant,
David Woodhouse 6087050
+		const gchar *cipher, const gchar *auth,
David Woodhouse 6087050
+		const gchar *key, gsize key_len);
David Woodhouse 6087050
 	void (*set_params) (PurpleMediaBackend *self,
David Woodhouse 6087050
 		guint num_params, GParameter *params);
David Woodhouse 6087050
 	const gchar **(*get_available_params) (void);
David Woodhouse 6087050
@@ -198,6 +205,43 @@
David Woodhouse 6087050
 		const gchar *sess_id, PurpleMediaCodec *codec);
David Woodhouse 6087050
 
David Woodhouse 6087050
 /**
David Woodhouse 6087050
+ * Sets the encryption parameters of our media in the session.
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * @param self The media backend the session is in.
David Woodhouse 6087050
+ * @param sess_id The session id of the session to set parameters of.
David Woodhouse 6087050
+ * @param cipher The cipher to use to encrypt our media in the session.
David Woodhouse 6087050
+ * @param auth The algorithm to use to compute authentication codes for our
David Woodhouse 6087050
+ *        media frames.
David Woodhouse 6087050
+ * @param key The encryption key.
David Woodhouse 6087050
+ * @param key_len Byte length of the encryption key.
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * @since 2.11.0
David Woodhouse 6087050
+ */
David Woodhouse 6087050
+gboolean purple_media_backend_set_encryption_parameters(PurpleMediaBackend *self,
David Woodhouse 6087050
+		const gchar *sess_id, const gchar *cipher,
David Woodhouse 6087050
+		const gchar *auth, const gchar *key, gsize key_len);
David Woodhouse 6087050
+
David Woodhouse 6087050
+/**
David Woodhouse 6087050
+ * Sets the decryption parameters for a session participant's media.
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * @param self The media backend the session is in.
David Woodhouse 6087050
+ * @param sess_id The session id of the session to set parameters of.
David Woodhouse 6087050
+ * @param participant The participant of the session to set parameters of.
David Woodhouse 6087050
+ * @param cipher The cipher to use to decrypt media coming from this session's
David Woodhouse 6087050
+ *          participant.
David Woodhouse 6087050
+ * @param auth The algorithm to use for authentication of the media coming
David Woodhouse 6087050
+ *        from the session's participant.
David Woodhouse 6087050
+ * @param key The decryption key.
David Woodhouse 6087050
+ * @param key_len Byte length of the decryption key.
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * @since 2.11.0
David Woodhouse 6087050
+ */
David Woodhouse 6087050
+gboolean purple_media_backend_set_decryption_parameters(PurpleMediaBackend *self,
David Woodhouse 6087050
+		const gchar *sess_id, const gchar *participant,
David Woodhouse 6087050
+		const gchar *cipher, const gchar *auth,
David Woodhouse 6087050
+		const gchar *key, gsize key_len);
David Woodhouse 6087050
+
David Woodhouse 6087050
+/**
David Woodhouse 6087050
  * Sets various optional parameters of the media backend.
David Woodhouse 6087050
  *
David Woodhouse 6087050
  * @param self The media backend to set the parameters on.
David Woodhouse 6087050
diff --git a/libpurple/media/enum-types.c b/libpurple/media/enum-types.c
David Woodhouse 6087050
--- a/libpurple/media/enum-types.c
David Woodhouse 6087050
+++ b/libpurple/media/enum-types.c
David Woodhouse 6087050
@@ -217,3 +217,44 @@
David Woodhouse 6087050
 	return type;
David Woodhouse 6087050
 }
David Woodhouse 6087050
 
David Woodhouse 6087050
+/*
David Woodhouse 6087050
+ * PurpleMediaCipher
David Woodhouse 6087050
+ */
David Woodhouse 6087050
+
David Woodhouse 6087050
+GType
David Woodhouse 6087050
+purple_media_cipher_get_type()
David Woodhouse 6087050
+{
David Woodhouse 6087050
+	static GType type = 0;
David Woodhouse 6087050
+	if (type == 0) {
David Woodhouse 6087050
+		static const GEnumValue values[] = {
David Woodhouse 6087050
+			{ PURPLE_MEDIA_CIPHER_NULL,
David Woodhouse 6087050
+				"PURPLE_MEDIA_CIPHER_NULL", "null" },
David Woodhouse 6087050
+			{ PURPLE_MEDIA_CIPHER_AES_128_ICM,
David Woodhouse 6087050
+				"PURPLE_MEDIA_CIPHER_AES_128_ICM", "AES-128-ICM" },
David Woodhouse 6087050
+			{ PURPLE_MEDIA_CIPHER_AES_256_ICM,
David Woodhouse 6087050
+				"PURPLE_MEDIA_CIPHER_AES_256_ICM", "AES-256-ICM" },
David Woodhouse 6087050
+			{ 0, NULL, NULL }
David Woodhouse 6087050
+		};
David Woodhouse 6087050
+		type = g_enum_register_static("PurpleMediaCipher", values);
David Woodhouse 6087050
+	}
David Woodhouse 6087050
+	return type;
David Woodhouse 6087050
+}
David Woodhouse 6087050
+
David Woodhouse 6087050
+GType
David Woodhouse 6087050
+purple_media_authentication_get_type(void)
David Woodhouse 6087050
+{
David Woodhouse 6087050
+	static GType type = 0;
David Woodhouse 6087050
+	if (type == 0) {
David Woodhouse 6087050
+		static const GEnumValue values[] = {
David Woodhouse 6087050
+			{ PURPLE_MEDIA_AUTHENTICATION_NULL,
David Woodhouse 6087050
+				"PURPLE_MEDIA_AUTHENTICATION_NULL", "null" },
David Woodhouse 6087050
+			{ PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_32,
David Woodhouse 6087050
+				"PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_32", "HMAC_SHA1_32" },
David Woodhouse 6087050
+			{ PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_80,
David Woodhouse 6087050
+				"PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_80", "HMAC_SHA1_80" },
David Woodhouse 6087050
+			{ 0, NULL, NULL }
David Woodhouse 6087050
+		};
David Woodhouse 6087050
+		type = g_enum_register_static("PurpleMediaAuthentication", values);
David Woodhouse 6087050
+	}
David Woodhouse 6087050
+	return type;
David Woodhouse 6087050
+}
David Woodhouse 6087050
diff --git a/libpurple/media/enum-types.h b/libpurple/media/enum-types.h
David Woodhouse 6087050
--- a/libpurple/media/enum-types.h
David Woodhouse 6087050
+++ b/libpurple/media/enum-types.h
David Woodhouse 6087050
@@ -106,6 +106,28 @@
David Woodhouse 6087050
 } PurpleMediaState;
David Woodhouse 6087050
 
David Woodhouse 6087050
 /**
David Woodhouse 6087050
+ * PurpleMediaCipher:
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * Media ciphers
David Woodhouse 6087050
+ */
David Woodhouse 6087050
+typedef enum {
David Woodhouse 6087050
+	PURPLE_MEDIA_CIPHER_NULL,
David Woodhouse 6087050
+	PURPLE_MEDIA_CIPHER_AES_128_ICM,
David Woodhouse 6087050
+	PURPLE_MEDIA_CIPHER_AES_256_ICM
David Woodhouse 6087050
+} PurpleMediaCipher;
David Woodhouse 6087050
+
David Woodhouse 6087050
+/**
David Woodhouse 6087050
+ * PurpleMediaAuthentication:
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * Media message authentication algorithms
David Woodhouse 6087050
+ */
David Woodhouse 6087050
+typedef enum {
David Woodhouse 6087050
+	PURPLE_MEDIA_AUTHENTICATION_NULL,
David Woodhouse 6087050
+	PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_32,
David Woodhouse 6087050
+	PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_80
David Woodhouse 6087050
+} PurpleMediaAuthentication;
David Woodhouse 6087050
+
David Woodhouse 6087050
+/**
David Woodhouse 6087050
  * Gets the media candidate type's GType
David Woodhouse 6087050
  *
David Woodhouse 6087050
  * @return The media candidate type's GType.
David Woodhouse 6087050
@@ -159,6 +181,24 @@
David Woodhouse 6087050
  */
David Woodhouse 6087050
 GType purple_media_state_changed_get_type(void);
David Woodhouse 6087050
 
David Woodhouse 6087050
+/**
David Woodhouse 6087050
+ * purple_media_cipher_get_type:
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * Gets the type of the cipher enum
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * Returns: The cipher enum's GType
David Woodhouse 6087050
+ */
David Woodhouse 6087050
+GType purple_media_cipher_get_type(void);
David Woodhouse 6087050
+
David Woodhouse 6087050
+/**
David Woodhouse 6087050
+ * purple_media_authentication_get_type:
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * Gets the type of the authentication enum
David Woodhouse 6087050
+ *
David Woodhouse 6087050
+ * Returns: The authentication enum's GType
David Woodhouse 6087050
+ */
David Woodhouse 6087050
+GType purple_media_authentication_get_type(void);
David Woodhouse 6087050
+
David Woodhouse 6087050
 G_END_DECLS
David Woodhouse 6087050
 
David Woodhouse 6087050
 #endif  /* _PURPLE_MEDIA_ENUM_TYPES_ */
David Woodhouse 6087050