-/*
+/* $OpenBSD: buffer.h,v 1.16 2006/08/03 03:34:41 deraadt Exp $ */
-buffer.h
+/*
+ * Author: Tatu Ylonen <ylo@cs.hut.fi>
+ * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
+ * All rights reserved
+ * Code for manipulating FIFO buffers.
+ *
+ * As far as I am concerned, the code I have written for this software
+ * can be used freely for any purpose. Any derived versions of this
+ * software must be clearly marked as such, and if the derived work is
+ * incompatible with the protocol description in the RFC file, it must be
+ * called by a name other than "ssh" or "Secure Shell".
+ */
-Author: Tatu Ylonen <ylo@cs.hut.fi>
+#ifndef BUFFER_H
+#define BUFFER_H
-Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
- All rights reserved
+typedef struct {
+ u_char *buf; /* Buffer for data. */
+ u_int alloc; /* Number of bytes allocated for data. */
+ u_int offset; /* Offset of first byte containing data. */
+ u_int end; /* Offset of last byte containing data. */
+} Buffer;
-Created: Sat Mar 18 04:12:25 1995 ylo
+void buffer_init(Buffer *);
+void buffer_clear(Buffer *);
+void buffer_free(Buffer *);
-Code for manipulating FIFO buffers.
+u_int buffer_len(Buffer *);
+void *buffer_ptr(Buffer *);
-*/
+void buffer_append(Buffer *, const void *, u_int);
+void *buffer_append_space(Buffer *, u_int);
-/* RCSID("$Id$"); */
+int buffer_check_alloc(Buffer *, u_int);
-#ifndef BUFFER_H
-#define BUFFER_H
+void buffer_get(Buffer *, void *, u_int);
-typedef struct
-{
- char *buf; /* Buffer for data. */
- unsigned int alloc; /* Number of bytes allocated for data. */
- unsigned int offset; /* Offset of first byte containing data. */
- unsigned int end; /* Offset of last byte containing data. */
-} Buffer;
+void buffer_consume(Buffer *, u_int);
+void buffer_consume_end(Buffer *, u_int);
-/* Initializes the buffer structure. */
-void buffer_init(Buffer *buffer);
+void buffer_dump(Buffer *);
-/* Frees any memory used for the buffer. */
-void buffer_free(Buffer *buffer);
+int buffer_get_ret(Buffer *, void *, u_int);
+int buffer_consume_ret(Buffer *, u_int);
+int buffer_consume_end_ret(Buffer *, u_int);
-/* Clears any data from the buffer, making it empty. This does not actually
- zero the memory. */
-void buffer_clear(Buffer *buffer);
+#include <openssl/bn.h>
-/* Appends data to the buffer, expanding it if necessary. */
-void buffer_append(Buffer *buffer, const char *data, unsigned int len);
+void buffer_put_bignum(Buffer *, const BIGNUM *);
+void buffer_put_bignum2(Buffer *, const BIGNUM *);
+void buffer_get_bignum(Buffer *, BIGNUM *);
+void buffer_get_bignum2(Buffer *, BIGNUM *);
-/* Appends space to the buffer, expanding the buffer if necessary.
- This does not actually copy the data into the buffer, but instead
- returns a pointer to the allocated region. */
-void buffer_append_space(Buffer *buffer, char **datap, unsigned int len);
+u_short buffer_get_short(Buffer *);
+void buffer_put_short(Buffer *, u_short);
-/* Returns the number of bytes of data in the buffer. */
-unsigned int buffer_len(Buffer *buffer);
+u_int buffer_get_int(Buffer *);
+void buffer_put_int(Buffer *, u_int);
-/* Gets data from the beginning of the buffer. */
-void buffer_get(Buffer *buffer, char *buf, unsigned int len);
+u_int64_t buffer_get_int64(Buffer *);
+void buffer_put_int64(Buffer *, u_int64_t);
-/* Consumes the given number of bytes from the beginning of the buffer. */
-void buffer_consume(Buffer *buffer, unsigned int bytes);
+int buffer_get_char(Buffer *);
+void buffer_put_char(Buffer *, int);
-/* Consumes the given number of bytes from the end of the buffer. */
-void buffer_consume_end(Buffer *buffer, unsigned int bytes);
+void *buffer_get_string(Buffer *, u_int *);
+void buffer_put_string(Buffer *, const void *, u_int);
+void buffer_put_cstring(Buffer *, const char *);
-/* Returns a pointer to the first used byte in the buffer. */
-char *buffer_ptr(Buffer *buffer);
+#define buffer_skip_string(b) \
+ do { u_int l = buffer_get_int(b); buffer_consume(b, l); } while (0)
-/* Dumps the contents of the buffer to stderr in hex. This intended for
- debugging purposes only. */
-void buffer_dump(Buffer *buffer);
+int buffer_put_bignum_ret(Buffer *, const BIGNUM *);
+int buffer_get_bignum_ret(Buffer *, BIGNUM *);
+int buffer_put_bignum2_ret(Buffer *, const BIGNUM *);
+int buffer_get_bignum2_ret(Buffer *, BIGNUM *);
+int buffer_get_short_ret(u_short *, Buffer *);
+int buffer_get_int_ret(u_int *, Buffer *);
+int buffer_get_int64_ret(u_int64_t *, Buffer *);
+void *buffer_get_string_ret(Buffer *, u_int *);
+int buffer_get_char_ret(char *, Buffer *);
-#endif /* BUFFER_H */
+#endif /* BUFFER_H */