cipher.h
Go to the documentation of this file.
1 
7 /* purple
8  *
9  * Purple is the legal property of its developers, whose names are too numerous
10  * to list here. Please refer to the COPYRIGHT file distributed with this
11  * source distribution.
12  *
13  * This program is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation; either version 2 of the License, or
16  * (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
26  */
27 #ifndef PURPLE_CIPHER_H
28 #define PURPLE_CIPHER_H
29 
30 #include <glib.h>
31 #include <string.h>
32 
33 #define PURPLE_CIPHER(obj) ((PurpleCipher *)(obj))
34 #define PURPLE_CIPHER_OPS(obj) ((PurpleCipherOps *)(obj))
35 #define PURPLE_CIPHER_CONTEXT(obj) ((PurpleCipherContext *)(obj))
37 typedef struct _PurpleCipher PurpleCipher;
38 typedef struct _PurpleCipherOps PurpleCipherOps;
39 typedef struct _PurpleCipherContext PurpleCipherContext;
44 typedef enum _PurpleCipherBatchMode {
45  PURPLE_CIPHER_BATCH_MODE_ECB,
46  PURPLE_CIPHER_BATCH_MODE_CBC
48 
52 typedef enum _PurpleCipherCaps {
73 
79  void (*set_option)(PurpleCipherContext *context, const gchar *name, void *value);
80 
82  void *(*get_option)(PurpleCipherContext *context, const gchar *name);
83 
85  void (*init)(PurpleCipherContext *context, void *extra);
86 
88  void (*reset)(PurpleCipherContext *context, void *extra);
89 
91  void (*uninit)(PurpleCipherContext *context);
92 
94  void (*set_iv)(PurpleCipherContext *context, guchar *iv, size_t len);
95 
97  void (*append)(PurpleCipherContext *context, const guchar *data, size_t len);
98 
100  gboolean (*digest)(PurpleCipherContext *context, size_t in_len, guchar digest[], size_t *out_len);
101 
103  int (*encrypt)(PurpleCipherContext *context, const guchar data[], size_t len, guchar output[], size_t *outlen);
104 
106  int (*decrypt)(PurpleCipherContext *context, const guchar data[], size_t len, guchar output[], size_t *outlen);
107 
109  void (*set_salt)(PurpleCipherContext *context, guchar *salt);
110 
112  size_t (*get_salt_size)(PurpleCipherContext *context);
113 
115  void (*set_key)(PurpleCipherContext *context, const guchar *key);
116 
118  size_t (*get_key_size)(PurpleCipherContext *context);
119 
122 
125 
127  size_t (*get_block_size)(PurpleCipherContext *context);
128 
130  void (*set_key_with_len)(PurpleCipherContext *context, const guchar *key, size_t len);
131 };
132 
133 G_BEGIN_DECLS
134 
135 /*****************************************************************************/
137 /*****************************************************************************/
147 const gchar *purple_cipher_get_name(PurpleCipher *cipher);
148 
157 
170 gboolean purple_cipher_digest_region(const gchar *name, const guchar *data, size_t data_len, size_t in_len, guchar digest[], size_t *out_len);
171 
173 /******************************************************************************/
175 /******************************************************************************/
185 PurpleCipher *purple_ciphers_find_cipher(const gchar *name);
186 
196 
205 
212 GList *purple_ciphers_get_ciphers(void);
213 
215 /******************************************************************************/
217 /******************************************************************************/
225 gpointer purple_ciphers_get_handle(void);
226 
230 void purple_ciphers_init(void);
231 
235 void purple_ciphers_uninit(void);
236 
238 /******************************************************************************/
240 /******************************************************************************/
250 void purple_cipher_context_set_option(PurpleCipherContext *context, const gchar *name, gpointer value);
251 
259 gpointer purple_cipher_context_get_option(PurpleCipherContext *context, const gchar *name);
260 
270 
279 PurpleCipherContext *purple_cipher_context_new_by_name(const gchar *name, void *extra);
280 
288 void purple_cipher_context_reset(PurpleCipherContext *context, gpointer extra);
289 
296 
305 void purple_cipher_context_set_iv(PurpleCipherContext *context, guchar *iv, size_t len);
306 
314 void purple_cipher_context_append(PurpleCipherContext *context, const guchar *data, size_t len);
315 
324 gboolean purple_cipher_context_digest(PurpleCipherContext *context, size_t in_len, guchar digest[], size_t *out_len);
325 
334 gboolean purple_cipher_context_digest_to_str(PurpleCipherContext *context, size_t in_len, gchar digest_s[], size_t *out_len);
335 
347 gint purple_cipher_context_encrypt(PurpleCipherContext *context, const guchar data[], size_t len, guchar output[], size_t *outlen);
348 
360 gint purple_cipher_context_decrypt(PurpleCipherContext *context, const guchar data[], size_t len, guchar output[], size_t *outlen);
361 
368 void purple_cipher_context_set_salt(PurpleCipherContext *context, guchar *salt);
369 
378 
385 void purple_cipher_context_set_key(PurpleCipherContext *context, const guchar *key);
386 
395 
404 
413 
422 
431 void purple_cipher_context_set_key_with_len(PurpleCipherContext *context, const guchar *key, size_t len);
432 
439 void purple_cipher_context_set_data(PurpleCipherContext *context, gpointer data);
440 
449 
451 /*****************************************************************************/
453 /*****************************************************************************/
471  const gchar *algorithm, const gchar *username,
472  const gchar *realm, const gchar *password,
473  const gchar *nonce, const gchar *client_nonce);
474 
492  const gchar *algorithm, const gchar *method,
493  const gchar *digest_uri, const gchar *qop,
494  const gchar *entity, const gchar *nonce,
495  const gchar *nonce_count, const gchar *client_nonce,
496  const gchar *session_key);
497 
500 G_END_DECLS
501 
502 #endif /* PURPLE_CIPHER_H */