summary refs log tree commit diff stats
path: root/libotr/libotr-4.1.1/toolkit/parse.h
diff options
context:
space:
mode:
Diffstat (limited to 'libotr/libotr-4.1.1/toolkit/parse.h')
-rw-r--r--libotr/libotr-4.1.1/toolkit/parse.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/libotr/libotr-4.1.1/toolkit/parse.h b/libotr/libotr-4.1.1/toolkit/parse.h
new file mode 100644
index 0000000..21a335f
--- /dev/null
+++ b/libotr/libotr-4.1.1/toolkit/parse.h
@@ -0,0 +1,163 @@
+/*
+ *  Off-the-Record Messaging Toolkit
+ *  Copyright (C) 2004-2012  Ian Goldberg, Rob Smits, Chris Alexander,
+ *                           Nikita Borisov
+ *                           <otr@cypherpunks.ca>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of version 2 of the GNU General Public License as
+ *  published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __PARSE_H__
+#define __PARSE_H__
+
+#include <gcrypt.h>
+
+typedef struct s_KeyExchMsg {
+    unsigned char *raw;         /* The base64-decoded data; must be free()d */
+    unsigned char reply;
+    gcry_mpi_t p, q, g, e;
+    unsigned int keyid;
+    gcry_mpi_t y;
+    gcry_mpi_t r, s;
+    unsigned char *sigstart;    /* Pointers into the "raw" array.  Don't */
+    unsigned char *sigend;      /*   free() these. */
+} * KeyExchMsg;
+
+typedef struct s_DataMsg {
+    unsigned char *raw;         /* The base64-decoded data; must be free()d */
+    size_t rawlen;
+    int flags;
+    unsigned char version;
+    unsigned int sender_instance;
+    unsigned int receiver_instance;
+    unsigned int sender_keyid;
+    unsigned int rcpt_keyid;
+    gcry_mpi_t y;
+    unsigned char ctr[8];
+    unsigned char *encmsg;      /* A copy; must be free()d */
+    size_t encmsglen;
+    unsigned char mac[20];
+    unsigned char *mackeys;     /* A copy; must be free()d */
+    size_t mackeyslen;
+    unsigned char *macstart;    /* Pointers into the "raw" array.  Don't */
+    unsigned char *macend;      /*   free() these. */
+} * DataMsg;
+
+typedef struct s_CommitMsg {
+    unsigned char *raw;         /* The base64-decoded data; must be free()d */
+    unsigned char version;
+    unsigned int sender_instance;
+    unsigned int receiver_instance;
+    unsigned char *enckey;
+    size_t enckeylen;
+    unsigned char *hashkey;
+    size_t hashkeylen;
+} * CommitMsg;
+
+typedef struct s_KeyMsg {
+    unsigned char *raw;         /* The base64-decoded data; must be free()d */
+    unsigned char version;
+    unsigned int sender_instance;
+    unsigned int receiver_instance;
+    gcry_mpi_t y;
+} * KeyMsg;
+
+typedef struct s_RevealSigMsg {
+    unsigned char *raw;         /* The base64-decoded data; must be free()d */
+    unsigned char version;
+    unsigned int sender_instance;
+    unsigned int receiver_instance;
+    unsigned char *key;
+    size_t keylen;
+    unsigned char *encsig;
+    size_t encsiglen;
+    unsigned char mac[20];
+} * RevealSigMsg;
+
+typedef struct s_SignatureMsg {
+    unsigned char *raw;         /* The base64-decoded data; must be free()d */
+    unsigned char version;
+    unsigned int sender_instance;
+    unsigned int receiver_instance;
+    unsigned char *encsig;
+    size_t encsiglen;
+    unsigned char mac[20];
+} * SignatureMsg;
+
+/* Dump an unsigned int to a FILE * */
+void dump_int(FILE *stream, const char *title, unsigned int val);
+
+/* Dump an mpi to a FILE * */
+void dump_mpi(FILE *stream, const char *title, gcry_mpi_t val);
+
+/* Dump data to a FILE * */
+void dump_data(FILE *stream, const char *title, const unsigned char *data,
+	size_t datalen);
+
+/* Parse a Key Exchange Message into a newly-allocated KeyExchMsg structure */
+KeyExchMsg parse_keyexch(const char *msg);
+
+/* Deallocate a KeyExchMsg and all of the data it points to */
+void free_keyexch(KeyExchMsg keyexch);
+
+/* Parse a D-H Commit Message into a newly-allocated CommitMsg structure */
+CommitMsg parse_commit(const char *msg);
+
+/* Parse a Data Message into a newly-allocated DataMsg structure */
+DataMsg parse_datamsg(const char *msg);
+
+/* Deallocate a CommitMsg and all of the data it points to */
+void free_commit(CommitMsg cmsg);
+
+/* Parse a Reveal Signature Message into a newly-allocated RevealSigMsg
+ * structure */
+RevealSigMsg parse_revealsig(const char *msg);
+
+/* Deallocate a RevealSigMsg and all of the data it points to */
+void free_revealsig(RevealSigMsg rmsg);
+
+/* Parse a Signature Message into a newly-allocated SignatureMsg structure */
+SignatureMsg parse_signature(const char *msg);
+
+/* Deallocate a SignatureMsg and all of the data it points to */
+void free_signature(SignatureMsg smsg);
+
+/* Parse a D-H Key Message into a newly-allocated KeyMsg structure */
+KeyMsg parse_key(const char *msg);
+
+/* Deallocate a KeyMsg and all of the data it points to */
+void free_key(KeyMsg cmsg);
+
+/* Recalculate the MAC on the message, base64-encode the resulting MAC'd
+ * message, and put on the appropriate header and footer.  Return a
+ * newly-allocated pointer to the result, which the caller will have to
+ * free(). */
+char *remac_datamsg(DataMsg datamsg, unsigned char mackey[20]);
+
+/* Assemble a new Data Message from its pieces.  Return a
+ * newly-allocated string containing the base64 representation. */
+char *assemble_datamsg(unsigned char mackey[20],
+	unsigned char version, unsigned int sender_instance,
+	unsigned int receiver_instance, int flags, unsigned int sender_keyid,
+	unsigned int rcpt_keyid, gcry_mpi_t y,
+	unsigned char ctr[8], unsigned char *encmsg, size_t encmsglen,
+	unsigned char *mackeys, size_t mackeyslen);
+
+/* Deallocate a DataMsg and all of the data it points to */
+void free_datamsg(DataMsg datamsg);
+
+/* Convert a string of hex chars to a buffer of unsigned chars. */
+void argv_to_buf(unsigned char **bufp, size_t *lenp, char *arg);
+
+#endif