/* crypto-vala.h generated by valac 0.56.19, the Vala compiler, do not modify */

#ifndef __CRYPTO_VALA_CRYPTO_VALA_H__
#define __CRYPTO_VALA_CRYPTO_VALA_H__

#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include <gio/gio.h>

G_BEGIN_DECLS

#if !defined(VALA_EXTERN)
#if defined(_MSC_VER)
#define VALA_EXTERN __declspec(dllexport) extern
#elif __GNUC__ >= 4
#define VALA_EXTERN __attribute__((visibility("default"))) extern
#else
#define VALA_EXTERN extern
#endif
#endif
#define CRYPTO_SRTP_AES_CM_128_HMAC_SHA1_80 "AES_CM_128_HMAC_SHA1_80"
#define CRYPTO_SRTP_AES_CM_128_HMAC_SHA1_32 "AES_CM_128_HMAC_SHA1_32"
#define CRYPTO_SRTP_F8_128_HMAC_SHA1_80 "F8_128_HMAC_SHA1_80"

#define CRYPTO_TYPE_SYMMETRIC_CIPHER (crypto_symmetric_cipher_get_type ())
#define CRYPTO_SYMMETRIC_CIPHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER, CryptoSymmetricCipher))
#define CRYPTO_SYMMETRIC_CIPHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CRYPTO_TYPE_SYMMETRIC_CIPHER, CryptoSymmetricCipherClass))
#define CRYPTO_IS_SYMMETRIC_CIPHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER))
#define CRYPTO_IS_SYMMETRIC_CIPHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CRYPTO_TYPE_SYMMETRIC_CIPHER))
#define CRYPTO_SYMMETRIC_CIPHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER, CryptoSymmetricCipherClass))

typedef struct _CryptoSymmetricCipher CryptoSymmetricCipher;
typedef struct _CryptoSymmetricCipherClass CryptoSymmetricCipherClass;
typedef struct _CryptoSymmetricCipherPrivate CryptoSymmetricCipherPrivate;

#define CRYPTO_TYPE_ERROR (crypto_error_get_type ())

#define CRYPTO_TYPE_SYMMETRIC_CIPHER_CONVERTER (crypto_symmetric_cipher_converter_get_type ())
#define CRYPTO_SYMMETRIC_CIPHER_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER_CONVERTER, CryptoSymmetricCipherConverter))
#define CRYPTO_SYMMETRIC_CIPHER_CONVERTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CRYPTO_TYPE_SYMMETRIC_CIPHER_CONVERTER, CryptoSymmetricCipherConverterClass))
#define CRYPTO_IS_SYMMETRIC_CIPHER_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER_CONVERTER))
#define CRYPTO_IS_SYMMETRIC_CIPHER_CONVERTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CRYPTO_TYPE_SYMMETRIC_CIPHER_CONVERTER))
#define CRYPTO_SYMMETRIC_CIPHER_CONVERTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER_CONVERTER, CryptoSymmetricCipherConverterClass))

typedef struct _CryptoSymmetricCipherConverter CryptoSymmetricCipherConverter;
typedef struct _CryptoSymmetricCipherConverterClass CryptoSymmetricCipherConverterClass;
typedef struct _CryptoSymmetricCipherConverterPrivate CryptoSymmetricCipherConverterPrivate;

#define CRYPTO_TYPE_SYMMETRIC_CIPHER_ENCRYPTER (crypto_symmetric_cipher_encrypter_get_type ())
#define CRYPTO_SYMMETRIC_CIPHER_ENCRYPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER_ENCRYPTER, CryptoSymmetricCipherEncrypter))
#define CRYPTO_SYMMETRIC_CIPHER_ENCRYPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CRYPTO_TYPE_SYMMETRIC_CIPHER_ENCRYPTER, CryptoSymmetricCipherEncrypterClass))
#define CRYPTO_IS_SYMMETRIC_CIPHER_ENCRYPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER_ENCRYPTER))
#define CRYPTO_IS_SYMMETRIC_CIPHER_ENCRYPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CRYPTO_TYPE_SYMMETRIC_CIPHER_ENCRYPTER))
#define CRYPTO_SYMMETRIC_CIPHER_ENCRYPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER_ENCRYPTER, CryptoSymmetricCipherEncrypterClass))

typedef struct _CryptoSymmetricCipherEncrypter CryptoSymmetricCipherEncrypter;
typedef struct _CryptoSymmetricCipherEncrypterClass CryptoSymmetricCipherEncrypterClass;
typedef struct _CryptoSymmetricCipherEncrypterPrivate CryptoSymmetricCipherEncrypterPrivate;

#define CRYPTO_TYPE_SYMMETRIC_CIPHER_DECRYPTER (crypto_symmetric_cipher_decrypter_get_type ())
#define CRYPTO_SYMMETRIC_CIPHER_DECRYPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER_DECRYPTER, CryptoSymmetricCipherDecrypter))
#define CRYPTO_SYMMETRIC_CIPHER_DECRYPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CRYPTO_TYPE_SYMMETRIC_CIPHER_DECRYPTER, CryptoSymmetricCipherDecrypterClass))
#define CRYPTO_IS_SYMMETRIC_CIPHER_DECRYPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER_DECRYPTER))
#define CRYPTO_IS_SYMMETRIC_CIPHER_DECRYPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CRYPTO_TYPE_SYMMETRIC_CIPHER_DECRYPTER))
#define CRYPTO_SYMMETRIC_CIPHER_DECRYPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CRYPTO_TYPE_SYMMETRIC_CIPHER_DECRYPTER, CryptoSymmetricCipherDecrypterClass))

typedef struct _CryptoSymmetricCipherDecrypter CryptoSymmetricCipherDecrypter;
typedef struct _CryptoSymmetricCipherDecrypterClass CryptoSymmetricCipherDecrypterClass;
typedef struct _CryptoSymmetricCipherDecrypterPrivate CryptoSymmetricCipherDecrypterPrivate;

#define CRYPTO_SRTP_TYPE_SESSION (crypto_srtp_session_get_type ())
#define CRYPTO_SRTP_SESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CRYPTO_SRTP_TYPE_SESSION, CryptoSrtpSession))
#define CRYPTO_SRTP_SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CRYPTO_SRTP_TYPE_SESSION, CryptoSrtpSessionClass))
#define CRYPTO_SRTP_IS_SESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CRYPTO_SRTP_TYPE_SESSION))
#define CRYPTO_SRTP_IS_SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CRYPTO_SRTP_TYPE_SESSION))
#define CRYPTO_SRTP_SESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CRYPTO_SRTP_TYPE_SESSION, CryptoSrtpSessionClass))

typedef struct _CryptoSrtpSession CryptoSrtpSession;
typedef struct _CryptoSrtpSessionClass CryptoSrtpSessionClass;
typedef struct _CryptoSrtpSessionPrivate CryptoSrtpSessionPrivate;

struct _CryptoSymmetricCipher {
	GTypeInstance parent_instance;
	volatile int ref_count;
	CryptoSymmetricCipherPrivate * priv;
};

struct _CryptoSymmetricCipherClass {
	GTypeClass parent_class;
	void (*finalize) (CryptoSymmetricCipher *self);
};

typedef enum  {
	CRYPTO_ERROR_ILLEGAL_ARGUMENTS,
	CRYPTO_ERROR_GCRYPT,
	CRYPTO_ERROR_AUTHENTICATION_FAILED,
	CRYPTO_ERROR_UNKNOWN
} CryptoError;
#define CRYPTO_ERROR crypto_error_quark ()

struct _CryptoSymmetricCipherConverter {
	GObject parent_instance;
	CryptoSymmetricCipherConverterPrivate * priv;
	CryptoSymmetricCipher* cipher;
	gsize attached_taglen;
};

struct _CryptoSymmetricCipherConverterClass {
	GObjectClass parent_class;
	GConverterResult (*convert) (CryptoSymmetricCipherConverter* self, guint8* inbuf, gsize inbuf_length1, guint8* outbuf, gsize outbuf_length1, GConverterFlags flags, gsize* bytes_read, gsize* bytes_written, GError** error);
};

struct _CryptoSymmetricCipherEncrypter {
	CryptoSymmetricCipherConverter parent_instance;
	CryptoSymmetricCipherEncrypterPrivate * priv;
};

struct _CryptoSymmetricCipherEncrypterClass {
	CryptoSymmetricCipherConverterClass parent_class;
};

struct _CryptoSymmetricCipherDecrypter {
	CryptoSymmetricCipherConverter parent_instance;
	CryptoSymmetricCipherDecrypterPrivate * priv;
};

struct _CryptoSymmetricCipherDecrypterClass {
	CryptoSymmetricCipherConverterClass parent_class;
};

struct _CryptoSrtpSession {
	GTypeInstance parent_instance;
	volatile int ref_count;
	CryptoSrtpSessionPrivate * priv;
};

struct _CryptoSrtpSessionClass {
	GTypeClass parent_class;
	void (*finalize) (CryptoSrtpSession *self);
};

VALA_EXTERN gpointer crypto_symmetric_cipher_ref (gpointer instance);
VALA_EXTERN void crypto_symmetric_cipher_unref (gpointer instance);
VALA_EXTERN GParamSpec* crypto_param_spec_symmetric_cipher (const gchar* name,
                                                const gchar* nick,
                                                const gchar* blurb,
                                                GType object_type,
                                                GParamFlags flags);
VALA_EXTERN void crypto_value_set_symmetric_cipher (GValue* value,
                                        gpointer v_object);
VALA_EXTERN void crypto_value_take_symmetric_cipher (GValue* value,
                                         gpointer v_object);
VALA_EXTERN gpointer crypto_value_get_symmetric_cipher (const GValue* value);
VALA_EXTERN GType crypto_symmetric_cipher_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (CryptoSymmetricCipher, crypto_symmetric_cipher_unref)
VALA_EXTERN gboolean crypto_symmetric_cipher_supports (const gchar* algo_name);
VALA_EXTERN GQuark crypto_error_quark (void);
VALA_EXTERN GType crypto_error_get_type (void) G_GNUC_CONST ;
VALA_EXTERN CryptoSymmetricCipher* crypto_symmetric_cipher_new (const gchar* algo_name,
                                                    GError** error);
VALA_EXTERN CryptoSymmetricCipher* crypto_symmetric_cipher_construct (GType object_type,
                                                          const gchar* algo_name,
                                                          GError** error);
VALA_EXTERN void crypto_symmetric_cipher_set_key (CryptoSymmetricCipher* self,
                                      guint8* key,
                                      gint key_length1,
                                      GError** error);
VALA_EXTERN void crypto_symmetric_cipher_set_iv (CryptoSymmetricCipher* self,
                                     guint8* iv,
                                     gint iv_length1,
                                     GError** error);
VALA_EXTERN void crypto_symmetric_cipher_set_counter_vector (CryptoSymmetricCipher* self,
                                                 guint8* ctr,
                                                 gint ctr_length1,
                                                 GError** error);
VALA_EXTERN void crypto_symmetric_cipher_reset (CryptoSymmetricCipher* self,
                                    GError** error);
VALA_EXTERN guint8* crypto_symmetric_cipher_get_tag (CryptoSymmetricCipher* self,
                                         gsize taglen,
                                         gint* result_length1,
                                         GError** error);
VALA_EXTERN void crypto_symmetric_cipher_check_tag (CryptoSymmetricCipher* self,
                                        guint8* tag,
                                        gint tag_length1,
                                        GError** error);
VALA_EXTERN void crypto_symmetric_cipher_encrypt (CryptoSymmetricCipher* self,
                                      guint8* output,
                                      gint output_length1,
                                      guint8* input,
                                      gint input_length1,
                                      GError** error);
VALA_EXTERN void crypto_symmetric_cipher_decrypt (CryptoSymmetricCipher* self,
                                      guint8* output,
                                      gint output_length1,
                                      guint8* input,
                                      gint input_length1,
                                      GError** error);
VALA_EXTERN void crypto_symmetric_cipher_sync (CryptoSymmetricCipher* self,
                                   GError** error);
VALA_EXTERN GType crypto_symmetric_cipher_converter_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (CryptoSymmetricCipherConverter, g_object_unref)
VALA_EXTERN GConverterResult crypto_symmetric_cipher_converter_convert (CryptoSymmetricCipherConverter* self,
                                                            guint8* inbuf,
                                                            gsize inbuf_length1,
                                                            guint8* outbuf,
                                                            gsize outbuf_length1,
                                                            GConverterFlags flags,
                                                            gsize* bytes_read,
                                                            gsize* bytes_written,
                                                            GError** error);
VALA_EXTERN guint8* crypto_symmetric_cipher_converter_get_tag (CryptoSymmetricCipherConverter* self,
                                                   gsize taglen,
                                                   gint* result_length1,
                                                   GError** error);
VALA_EXTERN void crypto_symmetric_cipher_converter_check_tag (CryptoSymmetricCipherConverter* self,
                                                  guint8* tag,
                                                  gint tag_length1,
                                                  GError** error);
VALA_EXTERN CryptoSymmetricCipherConverter* crypto_symmetric_cipher_converter_construct (GType object_type);
VALA_EXTERN GType crypto_symmetric_cipher_encrypter_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (CryptoSymmetricCipherEncrypter, g_object_unref)
VALA_EXTERN CryptoSymmetricCipherEncrypter* crypto_symmetric_cipher_encrypter_new (CryptoSymmetricCipher* cipher,
                                                                       gsize attached_taglen);
VALA_EXTERN CryptoSymmetricCipherEncrypter* crypto_symmetric_cipher_encrypter_construct (GType object_type,
                                                                             CryptoSymmetricCipher* cipher,
                                                                             gsize attached_taglen);
VALA_EXTERN GType crypto_symmetric_cipher_decrypter_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (CryptoSymmetricCipherDecrypter, g_object_unref)
VALA_EXTERN CryptoSymmetricCipherDecrypter* crypto_symmetric_cipher_decrypter_new (CryptoSymmetricCipher* cipher,
                                                                       gsize attached_taglen);
VALA_EXTERN CryptoSymmetricCipherDecrypter* crypto_symmetric_cipher_decrypter_construct (GType object_type,
                                                                             CryptoSymmetricCipher* cipher,
                                                                             gsize attached_taglen);
VALA_EXTERN void crypto_randomize (guint8* buffer,
                       gint buffer_length1);
VALA_EXTERN gpointer crypto_srtp_session_ref (gpointer instance);
VALA_EXTERN void crypto_srtp_session_unref (gpointer instance);
VALA_EXTERN GParamSpec* crypto_srtp_param_spec_session (const gchar* name,
                                            const gchar* nick,
                                            const gchar* blurb,
                                            GType object_type,
                                            GParamFlags flags);
VALA_EXTERN void crypto_srtp_value_set_session (GValue* value,
                                    gpointer v_object);
VALA_EXTERN void crypto_srtp_value_take_session (GValue* value,
                                     gpointer v_object);
VALA_EXTERN gpointer crypto_srtp_value_get_session (const GValue* value);
VALA_EXTERN GType crypto_srtp_session_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (CryptoSrtpSession, crypto_srtp_session_unref)
VALA_EXTERN CryptoSrtpSession* crypto_srtp_session_new (void);
VALA_EXTERN CryptoSrtpSession* crypto_srtp_session_construct (GType object_type);
VALA_EXTERN guint8* crypto_srtp_session_encrypt_rtp (CryptoSrtpSession* self,
                                         guint8* data,
                                         gint data_length1,
                                         gint* result_length1,
                                         GError** error);
VALA_EXTERN guint8* crypto_srtp_session_decrypt_rtp (CryptoSrtpSession* self,
                                         guint8* data,
                                         gint data_length1,
                                         gint* result_length1,
                                         GError** error);
VALA_EXTERN guint8* crypto_srtp_session_encrypt_rtcp (CryptoSrtpSession* self,
                                          guint8* data,
                                          gint data_length1,
                                          gint* result_length1,
                                          GError** error);
VALA_EXTERN guint8* crypto_srtp_session_decrypt_rtcp (CryptoSrtpSession* self,
                                          guint8* data,
                                          gint data_length1,
                                          gint* result_length1,
                                          GError** error);
VALA_EXTERN void crypto_srtp_session_set_encryption_key (CryptoSrtpSession* self,
                                             const gchar* profile,
                                             guint8* key,
                                             gint key_length1,
                                             guint8* salt,
                                             gint salt_length1);
VALA_EXTERN void crypto_srtp_session_set_decryption_key (CryptoSrtpSession* self,
                                             const gchar* profile,
                                             guint8* key,
                                             gint key_length1,
                                             guint8* salt,
                                             gint salt_length1);
VALA_EXTERN gboolean crypto_srtp_session_get_has_encrypt (CryptoSrtpSession* self);
VALA_EXTERN gboolean crypto_srtp_session_get_has_decrypt (CryptoSrtpSession* self);

G_END_DECLS

#endif
