BN_BLINDING_new.pod 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. =pod
  2. =head1 NAME
  3. BN_BLINDING_new, BN_BLINDING_free, BN_BLINDING_update, BN_BLINDING_convert,
  4. BN_BLINDING_invert, BN_BLINDING_convert_ex, BN_BLINDING_invert_ex,
  5. BN_BLINDING_is_current_thread, BN_BLINDING_set_current_thread,
  6. BN_BLINDING_lock, BN_BLINDING_unlock, BN_BLINDING_get_flags,
  7. BN_BLINDING_set_flags, BN_BLINDING_create_param - blinding related BIGNUM functions
  8. =head1 SYNOPSIS
  9. #include <openssl/bn.h>
  10. BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai,
  11. BIGNUM *mod);
  12. void BN_BLINDING_free(BN_BLINDING *b);
  13. int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx);
  14. int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
  15. int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
  16. int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b,
  17. BN_CTX *ctx);
  18. int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b,
  19. BN_CTX *ctx);
  20. int BN_BLINDING_is_current_thread(BN_BLINDING *b);
  21. void BN_BLINDING_set_current_thread(BN_BLINDING *b);
  22. int BN_BLINDING_lock(BN_BLINDING *b);
  23. int BN_BLINDING_unlock(BN_BLINDING *b);
  24. unsigned long BN_BLINDING_get_flags(const BN_BLINDING *);
  25. void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long);
  26. BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
  27. const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
  28. int (*bn_mod_exp)(BIGNUM *r,
  29. const BIGNUM *a,
  30. const BIGNUM *p,
  31. const BIGNUM *m,
  32. BN_CTX *ctx,
  33. BN_MONT_CTX *m_ctx),
  34. BN_MONT_CTX *m_ctx);
  35. =head1 DESCRIPTION
  36. BN_BLINDING_new() allocates a new B<BN_BLINDING> structure and copies
  37. the B<A> and B<Ai> values into the newly created B<BN_BLINDING> object.
  38. BN_BLINDING_free() frees the B<BN_BLINDING> structure.
  39. If B<b> is NULL, nothing is done.
  40. BN_BLINDING_update() updates the B<BN_BLINDING> parameters by squaring
  41. the B<A> and B<Ai> or, after specific number of uses and if the
  42. necessary parameters are set, by re-creating the blinding parameters.
  43. BN_BLINDING_convert_ex() multiplies B<n> with the blinding factor B<A>.
  44. If B<r> is not NULL a copy the inverse blinding factor B<Ai> will be
  45. returned in B<r> (this is useful if a B<RSA> object is shared among
  46. several threads). BN_BLINDING_invert_ex() multiplies B<n> with the
  47. inverse blinding factor B<Ai>. If B<r> is not NULL it will be used as
  48. the inverse blinding.
  49. BN_BLINDING_convert() and BN_BLINDING_invert() are wrapper
  50. functions for BN_BLINDING_convert_ex() and BN_BLINDING_invert_ex()
  51. with B<r> set to NULL.
  52. BN_BLINDING_is_current_thread() returns whether the B<BN_BLINDING>
  53. structure is owned by the current thread. This is to help users
  54. provide proper locking if needed for multi-threaded use.
  55. BN_BLINDING_set_current_thread() sets the current thread as the
  56. owner of the B<BN_BLINDING> structure.
  57. BN_BLINDING_lock() locks the B<BN_BLINDING> structure.
  58. BN_BLINDING_unlock() unlocks the B<BN_BLINDING> structure.
  59. BN_BLINDING_get_flags() returns the BN_BLINDING flags. Currently
  60. there are two supported flags: B<BN_BLINDING_NO_UPDATE> and
  61. B<BN_BLINDING_NO_RECREATE>. B<BN_BLINDING_NO_UPDATE> inhibits the
  62. automatic update of the B<BN_BLINDING> parameters after each use
  63. and B<BN_BLINDING_NO_RECREATE> inhibits the automatic re-creation
  64. of the B<BN_BLINDING> parameters after a fixed number of uses (currently
  65. 32). In newly allocated B<BN_BLINDING> objects no flags are set.
  66. BN_BLINDING_set_flags() sets the B<BN_BLINDING> parameters flags.
  67. BN_BLINDING_create_param() creates new B<BN_BLINDING> parameters
  68. using the exponent B<e> and the modulus B<m>. B<bn_mod_exp> and
  69. B<m_ctx> can be used to pass special functions for exponentiation
  70. (normally BN_mod_exp_mont() and B<BN_MONT_CTX>).
  71. =head1 RETURN VALUES
  72. BN_BLINDING_new() returns the newly allocated B<BN_BLINDING> structure
  73. or NULL in case of an error.
  74. BN_BLINDING_update(), BN_BLINDING_convert(), BN_BLINDING_invert(),
  75. BN_BLINDING_convert_ex() and BN_BLINDING_invert_ex() return 1 on
  76. success and 0 if an error occurred.
  77. BN_BLINDING_is_current_thread() returns 1 if the current thread owns
  78. the B<BN_BLINDING> object, 0 otherwise.
  79. BN_BLINDING_set_current_thread() doesn't return anything.
  80. BN_BLINDING_lock(), BN_BLINDING_unlock() return 1 if the operation
  81. succeeded or 0 on error.
  82. BN_BLINDING_get_flags() returns the currently set B<BN_BLINDING> flags
  83. (a B<unsigned long> value).
  84. BN_BLINDING_create_param() returns the newly created B<BN_BLINDING>
  85. parameters or NULL on error.
  86. =head1 HISTORY
  87. BN_BLINDING_thread_id() was first introduced in OpenSSL 1.0.0, and it
  88. deprecates BN_BLINDING_set_thread_id() and BN_BLINDING_get_thread_id().
  89. =head1 COPYRIGHT
  90. Copyright 2005-2017 The OpenSSL Project Authors. All Rights Reserved.
  91. Licensed under the OpenSSL license (the "License"). You may not use
  92. this file except in compliance with the License. You can obtain a copy
  93. in the file LICENSE in the source distribution or at
  94. L<https://www.openssl.org/source/license.html>.
  95. =cut