dh_meth.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
  3. *
  4. * Licensed under the Apache License 2.0 (the "License"). You may not use
  5. * this file except in compliance with the License. You can obtain a copy
  6. * in the file LICENSE in the source distribution or at
  7. * https://www.openssl.org/source/license.html
  8. */
  9. /*
  10. * DH low level APIs are deprecated for public use, but still ok for
  11. * internal use.
  12. */
  13. #include "internal/deprecated.h"
  14. #include "dh_local.h"
  15. #include <string.h>
  16. #include <openssl/err.h>
  17. DH_METHOD *DH_meth_new(const char *name, int flags)
  18. {
  19. DH_METHOD *dhm = OPENSSL_zalloc(sizeof(*dhm));
  20. if (dhm != NULL) {
  21. dhm->flags = flags;
  22. dhm->name = OPENSSL_strdup(name);
  23. if (dhm->name != NULL)
  24. return dhm;
  25. OPENSSL_free(dhm);
  26. }
  27. ERR_raise(ERR_LIB_DH, ERR_R_MALLOC_FAILURE);
  28. return NULL;
  29. }
  30. void DH_meth_free(DH_METHOD *dhm)
  31. {
  32. if (dhm != NULL) {
  33. OPENSSL_free(dhm->name);
  34. OPENSSL_free(dhm);
  35. }
  36. }
  37. DH_METHOD *DH_meth_dup(const DH_METHOD *dhm)
  38. {
  39. DH_METHOD *ret = OPENSSL_malloc(sizeof(*ret));
  40. if (ret != NULL) {
  41. memcpy(ret, dhm, sizeof(*dhm));
  42. ret->name = OPENSSL_strdup(dhm->name);
  43. if (ret->name != NULL)
  44. return ret;
  45. OPENSSL_free(ret);
  46. }
  47. ERR_raise(ERR_LIB_DH, ERR_R_MALLOC_FAILURE);
  48. return NULL;
  49. }
  50. const char *DH_meth_get0_name(const DH_METHOD *dhm)
  51. {
  52. return dhm->name;
  53. }
  54. int DH_meth_set1_name(DH_METHOD *dhm, const char *name)
  55. {
  56. char *tmpname = OPENSSL_strdup(name);
  57. if (tmpname == NULL) {
  58. ERR_raise(ERR_LIB_DH, ERR_R_MALLOC_FAILURE);
  59. return 0;
  60. }
  61. OPENSSL_free(dhm->name);
  62. dhm->name = tmpname;
  63. return 1;
  64. }
  65. int DH_meth_get_flags(const DH_METHOD *dhm)
  66. {
  67. return dhm->flags;
  68. }
  69. int DH_meth_set_flags(DH_METHOD *dhm, int flags)
  70. {
  71. dhm->flags = flags;
  72. return 1;
  73. }
  74. void *DH_meth_get0_app_data(const DH_METHOD *dhm)
  75. {
  76. return dhm->app_data;
  77. }
  78. int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data)
  79. {
  80. dhm->app_data = app_data;
  81. return 1;
  82. }
  83. int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *)
  84. {
  85. return dhm->generate_key;
  86. }
  87. int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *))
  88. {
  89. dhm->generate_key = generate_key;
  90. return 1;
  91. }
  92. int (*DH_meth_get_compute_key(const DH_METHOD *dhm))
  93. (unsigned char *key, const BIGNUM *pub_key, DH *dh)
  94. {
  95. return dhm->compute_key;
  96. }
  97. int DH_meth_set_compute_key(DH_METHOD *dhm,
  98. int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh))
  99. {
  100. dhm->compute_key = compute_key;
  101. return 1;
  102. }
  103. int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm))
  104. (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *,
  105. BN_CTX *, BN_MONT_CTX *)
  106. {
  107. return dhm->bn_mod_exp;
  108. }
  109. int DH_meth_set_bn_mod_exp(DH_METHOD *dhm,
  110. int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *,
  111. const BIGNUM *, BN_CTX *, BN_MONT_CTX *))
  112. {
  113. dhm->bn_mod_exp = bn_mod_exp;
  114. return 1;
  115. }
  116. int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *)
  117. {
  118. return dhm->init;
  119. }
  120. int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *))
  121. {
  122. dhm->init = init;
  123. return 1;
  124. }
  125. int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *)
  126. {
  127. return dhm->finish;
  128. }
  129. int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *))
  130. {
  131. dhm->finish = finish;
  132. return 1;
  133. }
  134. int (*DH_meth_get_generate_params(const DH_METHOD *dhm))
  135. (DH *, int, int, BN_GENCB *)
  136. {
  137. return dhm->generate_params;
  138. }
  139. int DH_meth_set_generate_params(DH_METHOD *dhm,
  140. int (*generate_params) (DH *, int, int, BN_GENCB *))
  141. {
  142. dhm->generate_params = generate_params;
  143. return 1;
  144. }