150a69bb5SSascha Wildner /* $OpenBSD: dh.h,v 1.19 2021/03/12 04:08:19 dtucker Exp $ */ 218de8d7fSPeter Avalos 318de8d7fSPeter Avalos /* 418de8d7fSPeter Avalos * Copyright (c) 2000 Niels Provos. All rights reserved. 518de8d7fSPeter Avalos * 618de8d7fSPeter Avalos * Redistribution and use in source and binary forms, with or without 718de8d7fSPeter Avalos * modification, are permitted provided that the following conditions 818de8d7fSPeter Avalos * are met: 918de8d7fSPeter Avalos * 1. Redistributions of source code must retain the above copyright 1018de8d7fSPeter Avalos * notice, this list of conditions and the following disclaimer. 1118de8d7fSPeter Avalos * 2. Redistributions in binary form must reproduce the above copyright 1218de8d7fSPeter Avalos * notice, this list of conditions and the following disclaimer in the 1318de8d7fSPeter Avalos * documentation and/or other materials provided with the distribution. 1418de8d7fSPeter Avalos * 1518de8d7fSPeter Avalos * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1618de8d7fSPeter Avalos * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1718de8d7fSPeter Avalos * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1818de8d7fSPeter Avalos * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1918de8d7fSPeter Avalos * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2018de8d7fSPeter Avalos * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2118de8d7fSPeter Avalos * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2218de8d7fSPeter Avalos * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2318de8d7fSPeter Avalos * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2418de8d7fSPeter Avalos * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2518de8d7fSPeter Avalos */ 2618de8d7fSPeter Avalos #ifndef DH_H 2718de8d7fSPeter Avalos #define DH_H 2818de8d7fSPeter Avalos 290cbfa66cSDaniel Fojt #ifdef WITH_OPENSSL 300cbfa66cSDaniel Fojt 3118de8d7fSPeter Avalos struct dhgroup { 3218de8d7fSPeter Avalos int size; 3318de8d7fSPeter Avalos BIGNUM *g; 3418de8d7fSPeter Avalos BIGNUM *p; 3518de8d7fSPeter Avalos }; 3618de8d7fSPeter Avalos 3718de8d7fSPeter Avalos DH *choose_dh(int, int, int); 3818de8d7fSPeter Avalos DH *dh_new_group_asc(const char *, const char *); 3918de8d7fSPeter Avalos DH *dh_new_group(BIGNUM *, BIGNUM *); 4018de8d7fSPeter Avalos DH *dh_new_group1(void); 4118de8d7fSPeter Avalos DH *dh_new_group14(void); 42e9778795SPeter Avalos DH *dh_new_group16(void); 43e9778795SPeter Avalos DH *dh_new_group18(void); 44e9778795SPeter Avalos DH *dh_new_group_fallback(int); 4518de8d7fSPeter Avalos 46e9778795SPeter Avalos int dh_gen_key(DH *, int); 47664f4763Szrj int dh_pub_is_valid(const DH *, const BIGNUM *); 4818de8d7fSPeter Avalos 49e9778795SPeter Avalos u_int dh_estimate(int); 5050a69bb5SSascha Wildner void dh_set_moduli_file(const char *); 5118de8d7fSPeter Avalos 52e9778795SPeter Avalos /* 53e9778795SPeter Avalos * Max value from RFC4419. 54664f4763Szrj * Min value from RFC8270. 55e9778795SPeter Avalos */ 56e9778795SPeter Avalos #define DH_GRP_MIN 2048 5718de8d7fSPeter Avalos #define DH_GRP_MAX 8192 5818de8d7fSPeter Avalos 5918de8d7fSPeter Avalos /* 6018de8d7fSPeter Avalos * Values for "type" field of moduli(5) 6118de8d7fSPeter Avalos * Specifies the internal structure of the prime modulus. 6218de8d7fSPeter Avalos */ 6318de8d7fSPeter Avalos #define MODULI_TYPE_UNKNOWN (0) 6418de8d7fSPeter Avalos #define MODULI_TYPE_UNSTRUCTURED (1) 6518de8d7fSPeter Avalos #define MODULI_TYPE_SAFE (2) 6618de8d7fSPeter Avalos #define MODULI_TYPE_SCHNORR (3) 6718de8d7fSPeter Avalos #define MODULI_TYPE_SOPHIE_GERMAIN (4) 6818de8d7fSPeter Avalos #define MODULI_TYPE_STRONG (5) 6918de8d7fSPeter Avalos 7018de8d7fSPeter Avalos /* 7118de8d7fSPeter Avalos * Values for "tests" field of moduli(5) 7218de8d7fSPeter Avalos * Specifies the methods used in checking for primality. 7318de8d7fSPeter Avalos * Usually, more than one test is used. 7418de8d7fSPeter Avalos */ 7518de8d7fSPeter Avalos #define MODULI_TESTS_UNTESTED (0x00) 7618de8d7fSPeter Avalos #define MODULI_TESTS_COMPOSITE (0x01) 7718de8d7fSPeter Avalos #define MODULI_TESTS_SIEVE (0x02) 7818de8d7fSPeter Avalos #define MODULI_TESTS_MILLER_RABIN (0x04) 7918de8d7fSPeter Avalos #define MODULI_TESTS_JACOBI (0x08) 8018de8d7fSPeter Avalos #define MODULI_TESTS_ELLIPTIC (0x10) 8118de8d7fSPeter Avalos 820cbfa66cSDaniel Fojt #endif /* WITH_OPENSSL */ 8318de8d7fSPeter Avalos 840cbfa66cSDaniel Fojt #endif /* DH_H */ 85