1*de0e0e4dSAntonio Huete Jimenez /* $OpenBSD: ecdh.h,v 1.6 2022/07/12 14:42:49 kn Exp $ */ 2f5b1c8a1SJohn Marino /* ==================================================================== 3f5b1c8a1SJohn Marino * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. 4f5b1c8a1SJohn Marino * 5f5b1c8a1SJohn Marino * The Elliptic Curve Public-Key Crypto Library (ECC Code) included 6f5b1c8a1SJohn Marino * herein is developed by SUN MICROSYSTEMS, INC., and is contributed 7f5b1c8a1SJohn Marino * to the OpenSSL project. 8f5b1c8a1SJohn Marino * 9f5b1c8a1SJohn Marino * The ECC Code is licensed pursuant to the OpenSSL open source 10f5b1c8a1SJohn Marino * license provided below. 11f5b1c8a1SJohn Marino * 12f5b1c8a1SJohn Marino * The ECDH software is originally written by Douglas Stebila of 13f5b1c8a1SJohn Marino * Sun Microsystems Laboratories. 14f5b1c8a1SJohn Marino * 15f5b1c8a1SJohn Marino */ 16f5b1c8a1SJohn Marino /* ==================================================================== 17f5b1c8a1SJohn Marino * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. 18f5b1c8a1SJohn Marino * 19f5b1c8a1SJohn Marino * Redistribution and use in source and binary forms, with or without 20f5b1c8a1SJohn Marino * modification, are permitted provided that the following conditions 21f5b1c8a1SJohn Marino * are met: 22f5b1c8a1SJohn Marino * 23f5b1c8a1SJohn Marino * 1. Redistributions of source code must retain the above copyright 24f5b1c8a1SJohn Marino * notice, this list of conditions and the following disclaimer. 25f5b1c8a1SJohn Marino * 26f5b1c8a1SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 27f5b1c8a1SJohn Marino * notice, this list of conditions and the following disclaimer in 28f5b1c8a1SJohn Marino * the documentation and/or other materials provided with the 29f5b1c8a1SJohn Marino * distribution. 30f5b1c8a1SJohn Marino * 31f5b1c8a1SJohn Marino * 3. All advertising materials mentioning features or use of this 32f5b1c8a1SJohn Marino * software must display the following acknowledgment: 33f5b1c8a1SJohn Marino * "This product includes software developed by the OpenSSL Project 34f5b1c8a1SJohn Marino * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 35f5b1c8a1SJohn Marino * 36f5b1c8a1SJohn Marino * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 37f5b1c8a1SJohn Marino * endorse or promote products derived from this software without 38f5b1c8a1SJohn Marino * prior written permission. For written permission, please contact 39f5b1c8a1SJohn Marino * licensing@OpenSSL.org. 40f5b1c8a1SJohn Marino * 41f5b1c8a1SJohn Marino * 5. Products derived from this software may not be called "OpenSSL" 42f5b1c8a1SJohn Marino * nor may "OpenSSL" appear in their names without prior written 43f5b1c8a1SJohn Marino * permission of the OpenSSL Project. 44f5b1c8a1SJohn Marino * 45f5b1c8a1SJohn Marino * 6. Redistributions of any form whatsoever must retain the following 46f5b1c8a1SJohn Marino * acknowledgment: 47f5b1c8a1SJohn Marino * "This product includes software developed by the OpenSSL Project 48f5b1c8a1SJohn Marino * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 49f5b1c8a1SJohn Marino * 50f5b1c8a1SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 51f5b1c8a1SJohn Marino * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 52f5b1c8a1SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 53f5b1c8a1SJohn Marino * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 54f5b1c8a1SJohn Marino * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 55f5b1c8a1SJohn Marino * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 56f5b1c8a1SJohn Marino * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 57f5b1c8a1SJohn Marino * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 58f5b1c8a1SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 59f5b1c8a1SJohn Marino * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 60f5b1c8a1SJohn Marino * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 61f5b1c8a1SJohn Marino * OF THE POSSIBILITY OF SUCH DAMAGE. 62f5b1c8a1SJohn Marino * ==================================================================== 63f5b1c8a1SJohn Marino * 64f5b1c8a1SJohn Marino * This product includes cryptographic software written by Eric Young 65f5b1c8a1SJohn Marino * (eay@cryptsoft.com). This product includes software written by Tim 66f5b1c8a1SJohn Marino * Hudson (tjh@cryptsoft.com). 67f5b1c8a1SJohn Marino * 68f5b1c8a1SJohn Marino */ 69f5b1c8a1SJohn Marino #ifndef HEADER_ECDH_H 70f5b1c8a1SJohn Marino #define HEADER_ECDH_H 71f5b1c8a1SJohn Marino 72f5b1c8a1SJohn Marino #include <openssl/opensslconf.h> 73f5b1c8a1SJohn Marino 74f5b1c8a1SJohn Marino #ifdef OPENSSL_NO_ECDH 75f5b1c8a1SJohn Marino #error ECDH is disabled. 76f5b1c8a1SJohn Marino #endif 77f5b1c8a1SJohn Marino 78f5b1c8a1SJohn Marino #include <openssl/ec.h> 79f5b1c8a1SJohn Marino #include <openssl/ossl_typ.h> 80f5b1c8a1SJohn Marino #ifndef OPENSSL_NO_DEPRECATED 81f5b1c8a1SJohn Marino #include <openssl/bn.h> 82f5b1c8a1SJohn Marino #endif 83f5b1c8a1SJohn Marino 84f5b1c8a1SJohn Marino #ifdef __cplusplus 85f5b1c8a1SJohn Marino extern "C" { 86f5b1c8a1SJohn Marino #endif 87f5b1c8a1SJohn Marino 88f5b1c8a1SJohn Marino const ECDH_METHOD *ECDH_OpenSSL(void); 89f5b1c8a1SJohn Marino 90f5b1c8a1SJohn Marino void ECDH_set_default_method(const ECDH_METHOD *); 91f5b1c8a1SJohn Marino const ECDH_METHOD *ECDH_get_default_method(void); 92f5b1c8a1SJohn Marino int ECDH_set_method(EC_KEY *, const ECDH_METHOD *); 93f5b1c8a1SJohn Marino 94f5b1c8a1SJohn Marino int ECDH_size(const EC_KEY *ecdh); 95f5b1c8a1SJohn Marino int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, 96f5b1c8a1SJohn Marino EC_KEY *ecdh, 97f5b1c8a1SJohn Marino void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen)); 98f5b1c8a1SJohn Marino 99f5b1c8a1SJohn Marino int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new 100f5b1c8a1SJohn Marino *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); 101f5b1c8a1SJohn Marino int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg); 102f5b1c8a1SJohn Marino void *ECDH_get_ex_data(EC_KEY *d, int idx); 103f5b1c8a1SJohn Marino 104f5b1c8a1SJohn Marino 105f5b1c8a1SJohn Marino void ERR_load_ECDH_strings(void); 106f5b1c8a1SJohn Marino 107f5b1c8a1SJohn Marino /* Error codes for the ECDH functions. */ 108f5b1c8a1SJohn Marino 109f5b1c8a1SJohn Marino /* Function codes. */ 110f5b1c8a1SJohn Marino #define ECDH_F_ECDH_CHECK 102 111f5b1c8a1SJohn Marino #define ECDH_F_ECDH_COMPUTE_KEY 100 112f5b1c8a1SJohn Marino #define ECDH_F_ECDH_DATA_NEW_METHOD 101 113f5b1c8a1SJohn Marino 114f5b1c8a1SJohn Marino /* Reason codes. */ 115f5b1c8a1SJohn Marino #define ECDH_R_KDF_FAILED 102 116f5b1c8a1SJohn Marino #define ECDH_R_KEY_TRUNCATION 104 117f5b1c8a1SJohn Marino #define ECDH_R_NON_FIPS_METHOD 103 118f5b1c8a1SJohn Marino #define ECDH_R_NO_PRIVATE_VALUE 100 119f5b1c8a1SJohn Marino #define ECDH_R_POINT_ARITHMETIC_FAILURE 101 120f5b1c8a1SJohn Marino 121f5b1c8a1SJohn Marino #ifdef __cplusplus 122f5b1c8a1SJohn Marino } 123f5b1c8a1SJohn Marino #endif 124f5b1c8a1SJohn Marino #endif 125