1*19261079SEd Maste /* $OpenBSD: dh.h,v 1.19 2021/03/12 04:08:19 dtucker Exp $ */ 21e8db6e2SBrian Feldman 35b9b2fafSBrian Feldman /* 45b9b2fafSBrian Feldman * Copyright (c) 2000 Niels Provos. All rights reserved. 55b9b2fafSBrian Feldman * 65b9b2fafSBrian Feldman * Redistribution and use in source and binary forms, with or without 75b9b2fafSBrian Feldman * modification, are permitted provided that the following conditions 85b9b2fafSBrian Feldman * are met: 95b9b2fafSBrian Feldman * 1. Redistributions of source code must retain the above copyright 105b9b2fafSBrian Feldman * notice, this list of conditions and the following disclaimer. 115b9b2fafSBrian Feldman * 2. Redistributions in binary form must reproduce the above copyright 125b9b2fafSBrian Feldman * notice, this list of conditions and the following disclaimer in the 135b9b2fafSBrian Feldman * documentation and/or other materials provided with the distribution. 145b9b2fafSBrian Feldman * 155b9b2fafSBrian Feldman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 165b9b2fafSBrian Feldman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 175b9b2fafSBrian Feldman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 185b9b2fafSBrian Feldman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 195b9b2fafSBrian Feldman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 205b9b2fafSBrian Feldman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 215b9b2fafSBrian Feldman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 225b9b2fafSBrian Feldman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 235b9b2fafSBrian Feldman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 245b9b2fafSBrian Feldman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 255b9b2fafSBrian Feldman */ 265b9b2fafSBrian Feldman #ifndef DH_H 275b9b2fafSBrian Feldman #define DH_H 285b9b2fafSBrian Feldman 29*19261079SEd Maste #ifdef WITH_OPENSSL 30*19261079SEd Maste 315b9b2fafSBrian Feldman struct dhgroup { 325b9b2fafSBrian Feldman int size; 335b9b2fafSBrian Feldman BIGNUM *g; 345b9b2fafSBrian Feldman BIGNUM *p; 355b9b2fafSBrian Feldman }; 365b9b2fafSBrian Feldman 37ae1f160dSDag-Erling Smørgrav DH *choose_dh(int, int, int); 381e8db6e2SBrian Feldman DH *dh_new_group_asc(const char *, const char *); 391e8db6e2SBrian Feldman DH *dh_new_group(BIGNUM *, BIGNUM *); 401e8db6e2SBrian Feldman DH *dh_new_group1(void); 41d74d50a8SDag-Erling Smørgrav DH *dh_new_group14(void); 42076ad2f8SDag-Erling Smørgrav DH *dh_new_group16(void); 43076ad2f8SDag-Erling Smørgrav DH *dh_new_group18(void); 44557f75e5SDag-Erling Smørgrav DH *dh_new_group_fallback(int); 451e8db6e2SBrian Feldman 46bc5531deSDag-Erling Smørgrav int dh_gen_key(DH *, int); 472a01feabSEd Maste int dh_pub_is_valid(const DH *, const BIGNUM *); 481e8db6e2SBrian Feldman 49bc5531deSDag-Erling Smørgrav u_int dh_estimate(int); 50*19261079SEd Maste void dh_set_moduli_file(const char *); 511e8db6e2SBrian Feldman 52acc1a9efSDag-Erling Smørgrav /* 53acc1a9efSDag-Erling Smørgrav * Max value from RFC4419. 54*19261079SEd Maste * Min value from RFC8270. 55acc1a9efSDag-Erling Smørgrav */ 56acc1a9efSDag-Erling Smørgrav #define DH_GRP_MIN 2048 571e8db6e2SBrian Feldman #define DH_GRP_MAX 8192 585b9b2fafSBrian Feldman 59d4af9e69SDag-Erling Smørgrav /* 60d4af9e69SDag-Erling Smørgrav * Values for "type" field of moduli(5) 61d4af9e69SDag-Erling Smørgrav * Specifies the internal structure of the prime modulus. 62d4af9e69SDag-Erling Smørgrav */ 63d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_UNKNOWN (0) 64d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_UNSTRUCTURED (1) 65d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_SAFE (2) 66d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_SCHNORR (3) 67d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_SOPHIE_GERMAIN (4) 68d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_STRONG (5) 69d4af9e69SDag-Erling Smørgrav 70d4af9e69SDag-Erling Smørgrav /* 71d4af9e69SDag-Erling Smørgrav * Values for "tests" field of moduli(5) 72d4af9e69SDag-Erling Smørgrav * Specifies the methods used in checking for primality. 73d4af9e69SDag-Erling Smørgrav * Usually, more than one test is used. 74d4af9e69SDag-Erling Smørgrav */ 75d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_UNTESTED (0x00) 76d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_COMPOSITE (0x01) 77d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_SIEVE (0x02) 78d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_MILLER_RABIN (0x04) 79d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_JACOBI (0x08) 80d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_ELLIPTIC (0x10) 81d4af9e69SDag-Erling Smørgrav 82*19261079SEd Maste #endif /* WITH_OPENSSL */ 83d4af9e69SDag-Erling Smørgrav 84*19261079SEd Maste #endif /* DH_H */ 85