1/* $OpenBSD: buffer.h,v 1.25 2014/04/30 05:29:56 djm Exp $ */ 2 3/* 4 * Copyright (c) 2012 Damien Miller <djm@mindrot.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19/* Emulation wrappers for legacy OpenSSH buffer API atop sshbuf */ 20 21#ifndef BUFFER_H 22#define BUFFER_H 23 24#include "sshbuf.h" 25 26typedef struct sshbuf Buffer; 27 28#define buffer_init(b) sshbuf_init(b) 29#define buffer_clear(b) sshbuf_reset(b) 30#define buffer_free(b) sshbuf_free(b) 31#define buffer_dump(b) sshbuf_dump(b, stderr) 32 33/* XXX cast is safe: sshbuf never stores more than len 2^31 */ 34#define buffer_len(b) ((u_int) sshbuf_len(b)) 35#define buffer_ptr(b) sshbuf_mutable_ptr(b) 36 37void buffer_append(Buffer *, const void *, u_int); 38void *buffer_append_space(Buffer *, u_int); 39int buffer_check_alloc(Buffer *, u_int); 40void buffer_get(Buffer *, void *, u_int); 41 42void buffer_consume(Buffer *, u_int); 43void buffer_consume_end(Buffer *, u_int); 44 45 46int buffer_get_ret(Buffer *, void *, u_int); 47int buffer_consume_ret(Buffer *, u_int); 48int buffer_consume_end_ret(Buffer *, u_int); 49 50#include <openssl/objects.h> 51#include <openssl/bn.h> 52void buffer_put_bignum(Buffer *, const BIGNUM *); 53void buffer_put_bignum2(Buffer *, const BIGNUM *); 54void buffer_get_bignum(Buffer *, BIGNUM *); 55void buffer_get_bignum2(Buffer *, BIGNUM *); 56void buffer_put_bignum2_from_string(Buffer *, const u_char *, u_int); 57 58u_short buffer_get_short(Buffer *); 59void buffer_put_short(Buffer *, u_short); 60 61u_int buffer_get_int(Buffer *); 62void buffer_put_int(Buffer *, u_int); 63 64u_int64_t buffer_get_int64(Buffer *); 65void buffer_put_int64(Buffer *, u_int64_t); 66 67int buffer_get_char(Buffer *); 68void buffer_put_char(Buffer *, int); 69 70void *buffer_get_string(Buffer *, u_int *); 71const void *buffer_get_string_ptr(Buffer *, u_int *); 72void buffer_put_string(Buffer *, const void *, u_int); 73char *buffer_get_cstring(Buffer *, u_int *); 74void buffer_put_cstring(Buffer *, const char *); 75 76#define buffer_skip_string(b) (void)buffer_get_string_ptr(b, NULL); 77 78int buffer_put_bignum_ret(Buffer *, const BIGNUM *); 79int buffer_get_bignum_ret(Buffer *, BIGNUM *); 80int buffer_put_bignum2_ret(Buffer *, const BIGNUM *); 81int buffer_get_bignum2_ret(Buffer *, BIGNUM *); 82int buffer_get_short_ret(u_short *, Buffer *); 83int buffer_get_int_ret(u_int *, Buffer *); 84int buffer_get_int64_ret(u_int64_t *, Buffer *); 85void *buffer_get_string_ret(Buffer *, u_int *); 86char *buffer_get_cstring_ret(Buffer *, u_int *); 87const void *buffer_get_string_ptr_ret(Buffer *, u_int *); 88int buffer_get_char_ret(char *, Buffer *); 89 90#ifdef OPENSSL_HAS_ECC 91#include <openssl/ec.h> 92int buffer_put_ecpoint_ret(Buffer *, const EC_GROUP *, const EC_POINT *); 93void buffer_put_ecpoint(Buffer *, const EC_GROUP *, const EC_POINT *); 94int buffer_get_ecpoint_ret(Buffer *, const EC_GROUP *, EC_POINT *); 95void buffer_get_ecpoint(Buffer *, const EC_GROUP *, EC_POINT *); 96#endif 97 98#endif /* BUFFER_H */ 99 100