dh.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /* dh.h
  2. *
  3. * Copyright (C) 2006-2023 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 2 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. /* dh.h for openSSL */
  22. #ifndef WOLFSSL_DH_H_
  23. #define WOLFSSL_DH_H_
  24. #include <wolfssl/openssl/bn.h>
  25. #include <wolfssl/openssl/opensslv.h>
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. #ifndef WOLFSSL_DH_TYPE_DEFINED /* guard on redeclaration */
  30. typedef struct WOLFSSL_DH WOLFSSL_DH;
  31. #define WOLFSSL_DH_TYPE_DEFINED
  32. #endif
  33. struct WOLFSSL_DH {
  34. WOLFSSL_BIGNUM* p;
  35. WOLFSSL_BIGNUM* g;
  36. WOLFSSL_BIGNUM* q;
  37. WOLFSSL_BIGNUM* pub_key; /* openssh deference g^x */
  38. WOLFSSL_BIGNUM* priv_key; /* openssh deference x */
  39. void* internal; /* our DH */
  40. char inSet; /* internal set from external ? */
  41. char exSet; /* external set from internal ? */
  42. /*added for lighttpd openssl compatibility, go back and add a getter in
  43. * lighttpd src code.
  44. */
  45. int length;
  46. wolfSSL_Ref ref; /* Reference count information. */
  47. };
  48. WOLFSSL_API WOLFSSL_DH *wolfSSL_d2i_DHparams(WOLFSSL_DH **dh,
  49. const unsigned char **pp, long length);
  50. WOLFSSL_API int wolfSSL_i2d_DHparams(const WOLFSSL_DH *dh, unsigned char **out);
  51. WOLFSSL_API WOLFSSL_DH* wolfSSL_DH_new(void);
  52. WOLFSSL_API WOLFSSL_DH* wolfSSL_DH_new_by_nid(int nid);
  53. WOLFSSL_API void wolfSSL_DH_free(WOLFSSL_DH* dh);
  54. WOLFSSL_API WOLFSSL_DH* wolfSSL_DH_dup(WOLFSSL_DH* dh);
  55. WOLFSSL_API int wolfSSL_DH_up_ref(WOLFSSL_DH* dh);
  56. WOLFSSL_API int wolfSSL_DH_check(const WOLFSSL_DH *dh, int *codes);
  57. WOLFSSL_API int wolfSSL_DH_size(WOLFSSL_DH* dh);
  58. WOLFSSL_API int wolfSSL_DH_generate_key(WOLFSSL_DH* dh);
  59. WOLFSSL_API int wolfSSL_DH_compute_key(unsigned char* key, const WOLFSSL_BIGNUM* pub,
  60. WOLFSSL_DH* dh);
  61. WOLFSSL_API int wolfSSL_DH_LoadDer(WOLFSSL_DH* dh, const unsigned char* derBuf,
  62. int derSz);
  63. WOLFSSL_API int wolfSSL_DH_set_length(WOLFSSL_DH* dh, long len);
  64. WOLFSSL_API int wolfSSL_DH_set0_pqg(WOLFSSL_DH *dh, WOLFSSL_BIGNUM *p,
  65. WOLFSSL_BIGNUM *q, WOLFSSL_BIGNUM *g);
  66. WOLFSSL_API WOLFSSL_DH* wolfSSL_DH_get_2048_256(void);
  67. #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
  68. typedef WOLFSSL_DH DH;
  69. #define DH_new wolfSSL_DH_new
  70. #define DH_free wolfSSL_DH_free
  71. #define DH_up_ref wolfSSL_DH_up_ref
  72. #define DH_new_by_nid wolfSSL_DH_new_by_nid
  73. #define d2i_DHparams wolfSSL_d2i_DHparams
  74. #define i2d_DHparams wolfSSL_i2d_DHparams
  75. #define DH_check wolfSSL_DH_check
  76. #define DH_size wolfSSL_DH_size
  77. #define DH_generate_key wolfSSL_DH_generate_key
  78. #define DH_compute_key wolfSSL_DH_compute_key
  79. #define DH_set_length wolfSSL_DH_set_length
  80. #define DH_set0_pqg wolfSSL_DH_set0_pqg
  81. #define DH_get0_pqg wolfSSL_DH_get0_pqg
  82. #define DH_get0_key wolfSSL_DH_get0_key
  83. #define DH_set0_key wolfSSL_DH_set0_key
  84. #define DH_bits(x) (BN_num_bits((x)->p))
  85. #define DH_GENERATOR_2 2
  86. #define DH_CHECK_P_NOT_PRIME 0x01
  87. #define DH_CHECK_P_NOT_SAFE_PRIME 0x02
  88. #define DH_NOT_SUITABLE_GENERATOR 0x08
  89. /* Temporary values for wolfSSL_DH_Check*/
  90. #define DH_CHECK_INVALID_Q_VALUE 0x10
  91. #define DH_CHECK_Q_NOT_PRIME 0x11
  92. /* end temp */
  93. /* for pre 1.1.0 */
  94. #define get_rfc2409_prime_768 wolfSSL_DH_768_prime
  95. #define get_rfc2409_prime_1024 wolfSSL_DH_1024_prime
  96. #define get_rfc3526_prime_1536 wolfSSL_DH_1536_prime
  97. #define get_rfc3526_prime_2048 wolfSSL_DH_2048_prime
  98. #define get_rfc3526_prime_3072 wolfSSL_DH_3072_prime
  99. #define get_rfc3526_prime_4096 wolfSSL_DH_4096_prime
  100. #define get_rfc3526_prime_6144 wolfSSL_DH_6144_prime
  101. #define get_rfc3526_prime_8192 wolfSSL_DH_8192_prime
  102. #define DH_get_2048_256 wolfSSL_DH_get_2048_256
  103. #if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL)
  104. #define DH_generate_parameters wolfSSL_DH_generate_parameters
  105. #define DH_generate_parameters_ex wolfSSL_DH_generate_parameters_ex
  106. #endif /* OPENSSL_ALL || HAVE_STUNNEL */
  107. #define DH_GENERATOR_2 2
  108. #define DH_GENERATOR_5 5
  109. #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
  110. #ifdef __cplusplus
  111. } /* extern "C" */
  112. #endif
  113. #endif /* WOLFSSL_DH_H_ */