dh_meth.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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. return NULL;
  28. }
  29. void DH_meth_free(DH_METHOD *dhm)
  30. {
  31. if (dhm != NULL) {
  32. OPENSSL_free(dhm->name);
  33. OPENSSL_free(dhm);
  34. }
  35. }
  36. DH_METHOD *DH_meth_dup(const DH_METHOD *dhm)
  37. {
  38. DH_METHOD *ret = OPENSSL_malloc(sizeof(*ret));
  39. if (ret != NULL) {
  40. memcpy(ret, dhm, sizeof(*dhm));
  41. ret->name = OPENSSL_strdup(dhm->name);
  42. if (ret->name != NULL)
  43. return ret;
  44. OPENSSL_free(ret);
  45. }
  46. return NULL;
  47. }
  48. const char *DH_meth_get0_name(const DH_METHOD *dhm)
  49. {
  50. return dhm->name;
  51. }
  52. int DH_meth_set1_name(DH_METHOD *dhm, const char *name)
  53. {
  54. char *tmpname = OPENSSL_strdup(name);
  55. if (tmpname == NULL)
  56. return 0;
  57. OPENSSL_free(dhm->name);
  58. dhm->name = tmpname;
  59. return 1;
  60. }
  61. int DH_meth_get_flags(const DH_METHOD *dhm)
  62. {
  63. return dhm->flags;
  64. }
  65. int DH_meth_set_flags(DH_METHOD *dhm, int flags)
  66. {
  67. dhm->flags = flags;
  68. return 1;
  69. }
  70. void *DH_meth_get0_app_data(const DH_METHOD *dhm)
  71. {
  72. return dhm->app_data;
  73. }
  74. int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data)
  75. {
  76. dhm->app_data = app_data;
  77. return 1;
  78. }
  79. int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *)
  80. {
  81. return dhm->generate_key;
  82. }
  83. int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *))
  84. {
  85. dhm->generate_key = generate_key;
  86. return 1;
  87. }
  88. int (*DH_meth_get_compute_key(const DH_METHOD *dhm))
  89. (unsigned char *key, const BIGNUM *pub_key, DH *dh)
  90. {
  91. return dhm->compute_key;
  92. }
  93. int DH_meth_set_compute_key(DH_METHOD *dhm,
  94. int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh))
  95. {
  96. dhm->compute_key = compute_key;
  97. return 1;
  98. }
  99. int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm))
  100. (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *,
  101. BN_CTX *, BN_MONT_CTX *)
  102. {
  103. return dhm->bn_mod_exp;
  104. }
  105. int DH_meth_set_bn_mod_exp(DH_METHOD *dhm,
  106. int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *,
  107. const BIGNUM *, BN_CTX *, BN_MONT_CTX *))
  108. {
  109. dhm->bn_mod_exp = bn_mod_exp;
  110. return 1;
  111. }
  112. int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *)
  113. {
  114. return dhm->init;
  115. }
  116. int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *))
  117. {
  118. dhm->init = init;
  119. return 1;
  120. }
  121. int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *)
  122. {
  123. return dhm->finish;
  124. }
  125. int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *))
  126. {
  127. dhm->finish = finish;
  128. return 1;
  129. }
  130. int (*DH_meth_get_generate_params(const DH_METHOD *dhm))
  131. (DH *, int, int, BN_GENCB *)
  132. {
  133. return dhm->generate_params;
  134. }
  135. int DH_meth_set_generate_params(DH_METHOD *dhm,
  136. int (*generate_params) (DH *, int, int, BN_GENCB *))
  137. {
  138. dhm->generate_params = generate_params;
  139. return 1;
  140. }