1076ad2f8SDag-Erling Smørgrav /* $OpenBSD: dh.h,v 1.15 2016/05/02 10:26:04 djm 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 295b9b2fafSBrian Feldman struct dhgroup { 305b9b2fafSBrian Feldman int size; 315b9b2fafSBrian Feldman BIGNUM *g; 325b9b2fafSBrian Feldman BIGNUM *p; 335b9b2fafSBrian Feldman }; 345b9b2fafSBrian Feldman 35ae1f160dSDag-Erling Smørgrav DH *choose_dh(int, int, int); 361e8db6e2SBrian Feldman DH *dh_new_group_asc(const char *, const char *); 371e8db6e2SBrian Feldman DH *dh_new_group(BIGNUM *, BIGNUM *); 381e8db6e2SBrian Feldman DH *dh_new_group1(void); 39d74d50a8SDag-Erling Smørgrav DH *dh_new_group14(void); 40076ad2f8SDag-Erling Smørgrav DH *dh_new_group16(void); 41076ad2f8SDag-Erling Smørgrav DH *dh_new_group18(void); 42557f75e5SDag-Erling Smørgrav DH *dh_new_group_fallback(int); 431e8db6e2SBrian Feldman 44bc5531deSDag-Erling Smørgrav int dh_gen_key(DH *, int); 45*2a01feabSEd Maste int dh_pub_is_valid(const DH *, const BIGNUM *); 461e8db6e2SBrian Feldman 47bc5531deSDag-Erling Smørgrav u_int dh_estimate(int); 481e8db6e2SBrian Feldman 49acc1a9efSDag-Erling Smørgrav /* 50acc1a9efSDag-Erling Smørgrav * Max value from RFC4419. 51acc1a9efSDag-Erling Smørgrav * Miniumum increased in light of DH precomputation attacks. 52acc1a9efSDag-Erling Smørgrav */ 53acc1a9efSDag-Erling Smørgrav #define DH_GRP_MIN 2048 541e8db6e2SBrian Feldman #define DH_GRP_MAX 8192 555b9b2fafSBrian Feldman 56d4af9e69SDag-Erling Smørgrav /* 57d4af9e69SDag-Erling Smørgrav * Values for "type" field of moduli(5) 58d4af9e69SDag-Erling Smørgrav * Specifies the internal structure of the prime modulus. 59d4af9e69SDag-Erling Smørgrav */ 60d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_UNKNOWN (0) 61d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_UNSTRUCTURED (1) 62d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_SAFE (2) 63d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_SCHNORR (3) 64d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_SOPHIE_GERMAIN (4) 65d4af9e69SDag-Erling Smørgrav #define MODULI_TYPE_STRONG (5) 66d4af9e69SDag-Erling Smørgrav 67d4af9e69SDag-Erling Smørgrav /* 68d4af9e69SDag-Erling Smørgrav * Values for "tests" field of moduli(5) 69d4af9e69SDag-Erling Smørgrav * Specifies the methods used in checking for primality. 70d4af9e69SDag-Erling Smørgrav * Usually, more than one test is used. 71d4af9e69SDag-Erling Smørgrav */ 72d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_UNTESTED (0x00) 73d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_COMPOSITE (0x01) 74d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_SIEVE (0x02) 75d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_MILLER_RABIN (0x04) 76d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_JACOBI (0x08) 77d4af9e69SDag-Erling Smørgrav #define MODULI_TESTS_ELLIPTIC (0x10) 78d4af9e69SDag-Erling Smørgrav 79d4af9e69SDag-Erling Smørgrav 805b9b2fafSBrian Feldman #endif 81