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