dh.h (5319B)
1 /* dh.h 2 * 3 * Copyright (C) 2006-2025 wolfSSL Inc. 4 * 5 * This file is part of wolfSSL. 6 * 7 * wolfSSL is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * wolfSSL is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA 20 */ 21 22 /* dh.h for openSSL */ 23 24 25 #ifndef WOLFSSL_DH_H_ 26 #define WOLFSSL_DH_H_ 27 28 #include <wolfssl/openssl/bn.h> 29 #include <wolfssl/openssl/ssl.h> 30 #include <wolfssl/openssl/opensslv.h> 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #ifndef WOLFSSL_DH_TYPE_DEFINED /* guard on redeclaration */ 37 typedef struct WOLFSSL_DH WOLFSSL_DH; 38 #define WOLFSSL_DH_TYPE_DEFINED 39 #endif 40 41 struct WOLFSSL_DH { 42 WOLFSSL_BIGNUM* p; 43 WOLFSSL_BIGNUM* g; 44 WOLFSSL_BIGNUM* q; 45 WOLFSSL_BIGNUM* pub_key; /* openssh deference g^x */ 46 WOLFSSL_BIGNUM* priv_key; /* openssh deference x */ 47 void* internal; /* our DH */ 48 char inSet; /* internal set from external ? */ 49 char exSet; /* external set from internal ? */ 50 /*added for lighttpd openssl compatibility, go back and add a getter in 51 * lighttpd src code. 52 */ 53 int length; 54 wolfSSL_Ref ref; /* Reference count information. */ 55 }; 56 57 WOLFSSL_API WOLFSSL_DH *wolfSSL_d2i_DHparams(WOLFSSL_DH **dh, 58 const unsigned char **pp, long length); 59 WOLFSSL_API int wolfSSL_i2d_DHparams(const WOLFSSL_DH *dh, unsigned char **out); 60 WOLFSSL_API WOLFSSL_DH* wolfSSL_DH_new(void); 61 WOLFSSL_API WOLFSSL_DH* wolfSSL_DH_new_by_nid(int nid); 62 WOLFSSL_API void wolfSSL_DH_free(WOLFSSL_DH* dh); 63 WOLFSSL_API WOLFSSL_DH* wolfSSL_DH_dup(WOLFSSL_DH* dh); 64 WOLFSSL_API int wolfSSL_DH_up_ref(WOLFSSL_DH* dh); 65 66 WOLFSSL_API int wolfSSL_DH_check(const WOLFSSL_DH *dh, int *codes); 67 WOLFSSL_API int wolfSSL_DH_size(WOLFSSL_DH* dh); 68 WOLFSSL_API int wolfSSL_DH_generate_key(WOLFSSL_DH* dh); 69 WOLFSSL_API int wolfSSL_DH_compute_key(unsigned char* key, const WOLFSSL_BIGNUM* pub, 70 WOLFSSL_DH* dh); 71 WOLFSSL_API int wolfSSL_DH_compute_key_padded(unsigned char* key, 72 const WOLFSSL_BIGNUM* otherPub, WOLFSSL_DH* dh); 73 74 WOLFSSL_API int wolfSSL_DH_LoadDer(WOLFSSL_DH* dh, const unsigned char* derBuf, 75 int derSz); 76 WOLFSSL_API int wolfSSL_DH_set_length(WOLFSSL_DH* dh, long len); 77 WOLFSSL_API int wolfSSL_DH_set0_pqg(WOLFSSL_DH *dh, WOLFSSL_BIGNUM *p, 78 WOLFSSL_BIGNUM *q, WOLFSSL_BIGNUM *g); 79 80 WOLFSSL_API WOLFSSL_DH* wolfSSL_DH_get_2048_256(void); 81 82 #if !defined(OPENSSL_COEXIST) && (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) 83 84 typedef WOLFSSL_DH DH; 85 86 #define DH_new wolfSSL_DH_new 87 #define DH_free wolfSSL_DH_free 88 #define DH_up_ref wolfSSL_DH_up_ref 89 #define DH_new_by_nid wolfSSL_DH_new_by_nid 90 91 #define d2i_DHparams wolfSSL_d2i_DHparams 92 #define i2d_DHparams wolfSSL_i2d_DHparams 93 #define DH_check wolfSSL_DH_check 94 95 #define DH_size wolfSSL_DH_size 96 #define DH_generate_key wolfSSL_DH_generate_key 97 #define DH_compute_key wolfSSL_DH_compute_key 98 #define DH_compute_key_padded wolfSSL_DH_compute_key_padded 99 #define DH_set_length wolfSSL_DH_set_length 100 #define DH_set0_pqg wolfSSL_DH_set0_pqg 101 #define DH_get0_pqg wolfSSL_DH_get0_pqg 102 #define DH_get0_key wolfSSL_DH_get0_key 103 #define DH_set0_key wolfSSL_DH_set0_key 104 #define DH_bits(x) (BN_num_bits((x)->p)) 105 106 #define OPENSSL_DH_MAX_MODULUS_BITS DH_MAX_SIZE 107 108 #define DH_GENERATOR_2 2 109 #define DH_CHECK_P_NOT_PRIME 0x01 110 #define DH_CHECK_P_NOT_SAFE_PRIME 0x02 111 #define DH_NOT_SUITABLE_GENERATOR 0x08 112 113 /* Temporary values for wolfSSL_DH_Check*/ 114 #define DH_CHECK_INVALID_Q_VALUE 0x10 115 #define DH_CHECK_Q_NOT_PRIME 0x11 116 /* end temp */ 117 118 /* for pre 1.1.0 */ 119 #define get_rfc2409_prime_768 wolfSSL_DH_768_prime 120 #define get_rfc2409_prime_1024 wolfSSL_DH_1024_prime 121 #define get_rfc3526_prime_1536 wolfSSL_DH_1536_prime 122 #define get_rfc3526_prime_2048 wolfSSL_DH_2048_prime 123 #define get_rfc3526_prime_3072 wolfSSL_DH_3072_prime 124 #define get_rfc3526_prime_4096 wolfSSL_DH_4096_prime 125 #define get_rfc3526_prime_6144 wolfSSL_DH_6144_prime 126 #define get_rfc3526_prime_8192 wolfSSL_DH_8192_prime 127 128 #define DH_get_2048_256 wolfSSL_DH_get_2048_256 129 130 #if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) 131 #define DH_generate_parameters wolfSSL_DH_generate_parameters 132 #define DH_generate_parameters_ex wolfSSL_DH_generate_parameters_ex 133 #endif /* OPENSSL_ALL || HAVE_STUNNEL */ 134 135 #define DH_GENERATOR_2 2 136 #define DH_GENERATOR_5 5 137 138 #endif /* !OPENSSL_COEXIST && (OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL) */ 139 140 #ifdef __cplusplus 141 } /* extern "C" */ 142 #endif 143 144 #endif /* WOLFSSL_DH_H_ */