1295367Sdes/* $OpenBSD: buffer.c,v 1.36 2014/04/30 05:29:56 djm Exp $ */ 2295367Sdes 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#include "includes.h" 2257429Smarkm 23295367Sdes#include <sys/types.h> 24162852Sdes 2557429Smarkm#include "buffer.h" 2676259Sgreen#include "log.h" 27295367Sdes#include "ssherr.h" 2857429Smarkm 2960573Skrisvoid 3092555Sdesbuffer_append(Buffer *buffer, const void *data, u_int len) 3157429Smarkm{ 32295367Sdes int ret; 3357429Smarkm 34295367Sdes if ((ret = sshbuf_put(buffer, data, len)) != 0) 35295367Sdes fatal("%s: %s", __func__, ssh_err(ret)); 36162852Sdes} 37162852Sdes 3892555Sdesvoid * 3992555Sdesbuffer_append_space(Buffer *buffer, u_int len) 4057429Smarkm{ 41295367Sdes int ret; 42295367Sdes u_char *p; 4392555Sdes 44295367Sdes if ((ret = sshbuf_reserve(buffer, len, &p)) != 0) 45295367Sdes fatal("%s: %s", __func__, ssh_err(ret)); 46295367Sdes return p; 4757429Smarkm} 4857429Smarkm 49162852Sdesint 50162852Sdesbuffer_check_alloc(Buffer *buffer, u_int len) 51162852Sdes{ 52295367Sdes int ret = sshbuf_check_reserve(buffer, len); 53162852Sdes 54295367Sdes if (ret == 0) 55295367Sdes return 1; 56295367Sdes if (ret == SSH_ERR_NO_BUFFER_SPACE) 57295367Sdes return 0; 58295367Sdes fatal("%s: %s", __func__, ssh_err(ret)); 5957429Smarkm} 6057429Smarkm 61146998Sdesint 62146998Sdesbuffer_get_ret(Buffer *buffer, void *buf, u_int len) 6357429Smarkm{ 64295367Sdes int ret; 65295367Sdes 66295367Sdes if ((ret = sshbuf_get(buffer, buf, len)) != 0) { 67295367Sdes error("%s: %s", __func__, ssh_err(ret)); 68295367Sdes return -1; 69146998Sdes } 70295367Sdes return 0; 7157429Smarkm} 7257429Smarkm 73146998Sdesvoid 74146998Sdesbuffer_get(Buffer *buffer, void *buf, u_int len) 75146998Sdes{ 76146998Sdes if (buffer_get_ret(buffer, buf, len) == -1) 77295367Sdes fatal("%s: buffer error", __func__); 78146998Sdes} 79146998Sdes 80146998Sdesint 81146998Sdesbuffer_consume_ret(Buffer *buffer, u_int bytes) 82146998Sdes{ 83295367Sdes int ret = sshbuf_consume(buffer, bytes); 84295367Sdes 85295367Sdes if (ret == 0) 86295367Sdes return 0; 87295367Sdes if (ret == SSH_ERR_MESSAGE_INCOMPLETE) 88295367Sdes return -1; 89295367Sdes fatal("%s: %s", __func__, ssh_err(ret)); 90146998Sdes} 91146998Sdes 9260573Skrisvoid 9376259Sgreenbuffer_consume(Buffer *buffer, u_int bytes) 9457429Smarkm{ 95146998Sdes if (buffer_consume_ret(buffer, bytes) == -1) 96295367Sdes fatal("%s: buffer error", __func__); 9757429Smarkm} 9857429Smarkm 99146998Sdesint 100146998Sdesbuffer_consume_end_ret(Buffer *buffer, u_int bytes) 101146998Sdes{ 102295367Sdes int ret = sshbuf_consume_end(buffer, bytes); 103295367Sdes 104295367Sdes if (ret == 0) 105295367Sdes return 0; 106295367Sdes if (ret == SSH_ERR_MESSAGE_INCOMPLETE) 107295367Sdes return -1; 108295367Sdes fatal("%s: %s", __func__, ssh_err(ret)); 109146998Sdes} 110146998Sdes 11160573Skrisvoid 11276259Sgreenbuffer_consume_end(Buffer *buffer, u_int bytes) 11357429Smarkm{ 114146998Sdes if (buffer_consume_end_ret(buffer, bytes) == -1) 115295367Sdes fatal("%s: buffer error", __func__); 11657429Smarkm} 11757429Smarkm 11857429Smarkm 119