1295367Sdes/* $OpenBSD: buffer.h,v 1.25 2014/04/30 05:29:56 djm Exp $ */ 292555Sdes 357429Smarkm/* 4295367Sdes * Copyright (c) 2012 Damien Miller <djm@mindrot.org> 560573Skris * 6295367Sdes * Permission to use, copy, modify, and distribute this software for any 7295367Sdes * purpose with or without fee is hereby granted, provided that the above 8295367Sdes * copyright notice and this permission notice appear in all copies. 9295367Sdes * 10295367Sdes * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11295367Sdes * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12295367Sdes * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13295367Sdes * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14295367Sdes * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15295367Sdes * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16295367Sdes * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1757429Smarkm */ 1857429Smarkm 19295367Sdes/* Emulation wrappers for legacy OpenSSH buffer API atop sshbuf */ 20295367Sdes 2157429Smarkm#ifndef BUFFER_H 2257429Smarkm#define BUFFER_H 2357429Smarkm 24295367Sdes#include "sshbuf.h" 2557429Smarkm 26295367Sdestypedef struct sshbuf Buffer; 2757429Smarkm 28295367Sdes#define buffer_init(b) sshbuf_init(b) 29295367Sdes#define buffer_clear(b) sshbuf_reset(b) 30295367Sdes#define buffer_free(b) sshbuf_free(b) 31295367Sdes#define buffer_dump(b) sshbuf_dump(b, stderr) 3257429Smarkm 33295367Sdes/* XXX cast is safe: sshbuf never stores more than len 2^31 */ 34295367Sdes#define buffer_len(b) ((u_int) sshbuf_len(b)) 35295367Sdes#define buffer_ptr(b) sshbuf_mutable_ptr(b) 36295367Sdes 3792555Sdesvoid buffer_append(Buffer *, const void *, u_int); 3892555Sdesvoid *buffer_append_space(Buffer *, u_int); 39162852Sdesint buffer_check_alloc(Buffer *, u_int); 4092555Sdesvoid buffer_get(Buffer *, void *, u_int); 4157429Smarkm 4292555Sdesvoid buffer_consume(Buffer *, u_int); 4392555Sdesvoid buffer_consume_end(Buffer *, u_int); 4457429Smarkm 4557429Smarkm 46146998Sdesint buffer_get_ret(Buffer *, void *, u_int); 47146998Sdesint buffer_consume_ret(Buffer *, u_int); 48146998Sdesint buffer_consume_end_ret(Buffer *, u_int); 49146998Sdes 50295367Sdes#include <openssl/objects.h> 51162852Sdes#include <openssl/bn.h> 52162852Sdesvoid buffer_put_bignum(Buffer *, const BIGNUM *); 53162852Sdesvoid buffer_put_bignum2(Buffer *, const BIGNUM *); 54162852Sdesvoid buffer_get_bignum(Buffer *, BIGNUM *); 55162852Sdesvoid buffer_get_bignum2(Buffer *, BIGNUM *); 56295367Sdesvoid buffer_put_bignum2_from_string(Buffer *, const u_char *, u_int); 57162852Sdes 58162852Sdesu_short buffer_get_short(Buffer *); 59162852Sdesvoid buffer_put_short(Buffer *, u_short); 60162852Sdes 61162852Sdesu_int buffer_get_int(Buffer *); 62162852Sdesvoid buffer_put_int(Buffer *, u_int); 63162852Sdes 64162852Sdesu_int64_t buffer_get_int64(Buffer *); 65162852Sdesvoid buffer_put_int64(Buffer *, u_int64_t); 66162852Sdes 67162852Sdesint buffer_get_char(Buffer *); 68162852Sdesvoid buffer_put_char(Buffer *, int); 69162852Sdes 70162852Sdesvoid *buffer_get_string(Buffer *, u_int *); 71295367Sdesconst void *buffer_get_string_ptr(Buffer *, u_int *); 72162852Sdesvoid buffer_put_string(Buffer *, const void *, u_int); 73221420Sdeschar *buffer_get_cstring(Buffer *, u_int *); 74162852Sdesvoid buffer_put_cstring(Buffer *, const char *); 75162852Sdes 76295367Sdes#define buffer_skip_string(b) (void)buffer_get_string_ptr(b, NULL); 77162852Sdes 78162852Sdesint buffer_put_bignum_ret(Buffer *, const BIGNUM *); 79162852Sdesint buffer_get_bignum_ret(Buffer *, BIGNUM *); 80162852Sdesint buffer_put_bignum2_ret(Buffer *, const BIGNUM *); 81162852Sdesint buffer_get_bignum2_ret(Buffer *, BIGNUM *); 82162852Sdesint buffer_get_short_ret(u_short *, Buffer *); 83162852Sdesint buffer_get_int_ret(u_int *, Buffer *); 84162852Sdesint buffer_get_int64_ret(u_int64_t *, Buffer *); 85162852Sdesvoid *buffer_get_string_ret(Buffer *, u_int *); 86221420Sdeschar *buffer_get_cstring_ret(Buffer *, u_int *); 87295367Sdesconst void *buffer_get_string_ptr_ret(Buffer *, u_int *); 88295367Sdesint buffer_get_char_ret(char *, Buffer *); 89162852Sdes 90221420Sdes#ifdef OPENSSL_HAS_ECC 91221420Sdes#include <openssl/ec.h> 92221420Sdesint buffer_put_ecpoint_ret(Buffer *, const EC_GROUP *, const EC_POINT *); 93221420Sdesvoid buffer_put_ecpoint(Buffer *, const EC_GROUP *, const EC_POINT *); 94221420Sdesint buffer_get_ecpoint_ret(Buffer *, const EC_GROUP *, EC_POINT *); 95221420Sdesvoid buffer_get_ecpoint(Buffer *, const EC_GROUP *, EC_POINT *); 96221420Sdes#endif 97221420Sdes 98295367Sdes#endif /* BUFFER_H */ 99295367Sdes 100