1d059297112922cabb0c674840589be8db821fd9aAdam Langley/* $OpenBSD: bufec.c,v 1.4 2014/04/30 05:29:56 djm Exp $ */
2d059297112922cabb0c674840589be8db821fd9aAdam Langley
3bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/*
4d059297112922cabb0c674840589be8db821fd9aAdam Langley * Copyright (c) 2012 Damien Miller <djm@mindrot.org>
5bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman *
6bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Permission to use, copy, modify, and distribute this software for any
7bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * purpose with or without fee is hereby granted, provided that the above
8bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * copyright notice and this permission notice appear in all copies.
9bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman *
10bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman */
18bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
19d059297112922cabb0c674840589be8db821fd9aAdam Langley/* Emulation wrappers for legacy OpenSSH buffer API atop sshbuf */
20bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
21d059297112922cabb0c674840589be8db821fd9aAdam Langley#include "includes.h"
22bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
23bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#include <sys/types.h>
24bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
25bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#include "buffer.h"
26bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#include "log.h"
27d059297112922cabb0c674840589be8db821fd9aAdam Langley#include "ssherr.h"
28bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
29d059297112922cabb0c674840589be8db821fd9aAdam Langley#ifdef OPENSSL_HAS_ECC
30bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
31bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint
32bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanbuffer_put_ecpoint_ret(Buffer *buffer, const EC_GROUP *curve,
33bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman    const EC_POINT *point)
34bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman{
35d059297112922cabb0c674840589be8db821fd9aAdam Langley	int ret;
36bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
37d059297112922cabb0c674840589be8db821fd9aAdam Langley	if ((ret = sshbuf_put_ec(buffer, point, curve)) != 0) {
38d059297112922cabb0c674840589be8db821fd9aAdam Langley		error("%s: %s", __func__, ssh_err(ret));
39d059297112922cabb0c674840589be8db821fd9aAdam Langley		return -1;
40bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman	}
41d059297112922cabb0c674840589be8db821fd9aAdam Langley	return 0;
42bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}
43bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
44bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanvoid
45bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanbuffer_put_ecpoint(Buffer *buffer, const EC_GROUP *curve,
46bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman    const EC_POINT *point)
47bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman{
48bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman	if (buffer_put_ecpoint_ret(buffer, curve, point) == -1)
49bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman		fatal("%s: buffer error", __func__);
50bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}
51bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
52bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint
53bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanbuffer_get_ecpoint_ret(Buffer *buffer, const EC_GROUP *curve,
54bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman    EC_POINT *point)
55bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman{
56d059297112922cabb0c674840589be8db821fd9aAdam Langley	int ret;
57bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
58d059297112922cabb0c674840589be8db821fd9aAdam Langley	if ((ret = sshbuf_get_ec(buffer, point, curve)) != 0) {
59d059297112922cabb0c674840589be8db821fd9aAdam Langley		error("%s: %s", __func__, ssh_err(ret));
60bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman		return -1;
61bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman	}
62d059297112922cabb0c674840589be8db821fd9aAdam Langley	return 0;
63bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}
64bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
65bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanvoid
66bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanbuffer_get_ecpoint(Buffer *buffer, const EC_GROUP *curve,
67bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman    EC_POINT *point)
68bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman{
69bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman	if (buffer_get_ecpoint_ret(buffer, curve, point) == -1)
70bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman		fatal("%s: buffer error", __func__);
71bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}
72bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
73bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif /* OPENSSL_HAS_ECC */
74d059297112922cabb0c674840589be8db821fd9aAdam Langley
75