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