
#use wml::openssl-macros area=docs page=BN_BLINDING_new

<title>Documents, BN_BLINDING_new(3)</title>

<h1>BN_BLINDING_new(3)</h1>

#use wml::imp::generic

{:
## What's this? [[s|(<STRONG>[^<].+?)</A>(</STRONG><DD>)|$1$2|sg]]
[[s|<P>\s+<P>|<P>|sg]]
[[s|<P>\s+</|</|sg]]
[[s|<DD>\s*<DT>|<DD>&nbsp;<DT>|sg]]
[[s|<DD>\s*</DL>|<DD>&nbsp;</DL>|sg]]
[[s|\[|&#91;|sg]]
[[s|\]|&#93;|sg]]

<!-- INDEX BEGIN -->

<UL>

	<LI><A HREF="#NAME">NAME</A>
	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
	<LI><A HREF="#RETURN_VALUES">RETURN VALUES</A>
	<LI><A HREF="#SEE_ALSO">SEE ALSO</A>
	<LI><A HREF="#HISTORY">HISTORY</A>
	<LI><A HREF="#AUTHOR">AUTHOR</A>
</UL>
<!-- INDEX END -->

<HR>
<P>
<HR>
<H1><A NAME="NAME">NAME</A></H1>
<P>
BN_BLINDING_new, BN_BLINDING_free, BN_BLINDING_update, BN_BLINDING_convert,
BN_BLINDING_invert, BN_BLINDING_convert_ex, BN_BLINDING_invert_ex,
BN_BLINDING_get_thread_id, BN_BLINDING_set_thread_id,
BN_BLINDING_thread_id, BN_BLINDING_get_flags, BN_BLINDING_set_flags,
BN_BLINDING_create_param - blinding related BIGNUM functions.

</P>
<P>
<HR>
<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
<PRE> #include &lt;openssl/bn.h&gt;
</PRE>
<PRE> BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai,
        BIGNUM *mod);
 void BN_BLINDING_free(BN_BLINDING *b);
 int BN_BLINDING_update(BN_BLINDING *b,BN_CTX *ctx);
 int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
 int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
 int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b,
        BN_CTX *ctx);
 int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b,
        BN_CTX *ctx);
 \#ifndef OPENSSL_NO_DEPRECATED
 unsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *);
 void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long);
 \#endif
 CRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *);
 unsigned long BN_BLINDING_get_flags(const BN_BLINDING *);
 void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long);
 BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
        const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
        int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
                          const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx),
        BN_MONT_CTX *m_ctx);
</PRE>
<P>
<HR>
<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
<P>
<CODE>BN_BLINDING_new()</CODE> allocates a new <STRONG>BN_BLINDING</STRONG> structure and copies the <STRONG>A</STRONG> and <STRONG>Ai</STRONG> values into the newly created <STRONG>BN_BLINDING</STRONG> object.

</P>
<P>
<CODE>BN_BLINDING_free()</CODE> frees the <STRONG>BN_BLINDING</STRONG> structure.

</P>
<P>
<CODE>BN_BLINDING_update()</CODE> updates the <STRONG>BN_BLINDING</STRONG> parameters by squaring the <STRONG>A</STRONG> and <STRONG>Ai</STRONG> or, after specific number of uses and if the necessary parameters are set,
by re-creating the blinding parameters.

</P>
<P>
<CODE>BN_BLINDING_convert_ex()</CODE> multiplies <STRONG>n</STRONG> with the blinding factor <STRONG>A</STRONG>. If <STRONG>r</STRONG> is not NULL a copy the inverse blinding factor <STRONG>Ai</STRONG> will be returned in <STRONG>r</STRONG> (this is useful if a <STRONG>RSA</STRONG> object is shared amoung several threads).
<CODE>BN_BLINDING_invert_ex()</CODE> multiplies <STRONG>n</STRONG> with the inverse blinding factor <STRONG>Ai</STRONG>. If <STRONG>r</STRONG> is not NULL it will be used as the inverse blinding.

</P>
<P>
<CODE>BN_BLINDING_convert()</CODE> and <CODE>BN_BLINDING_invert()</CODE>
are wrapper functions for <CODE>BN_BLINDING_convert_ex()</CODE> and
<CODE>BN_BLINDING_invert_ex()</CODE> with <STRONG>r</STRONG> set to NULL.

</P>
<P>
<CODE>BN_BLINDING_thread_id()</CODE> provides access to the <STRONG>CRYPTO_THREADID</STRONG>
object within the <STRONG>BN_BLINDING</STRONG> structure. This is to help users provide proper locking if needed for
multi-threaded use. The ``thread id'' object of a newly allocated <STRONG>BN_BLINDING</STRONG> structure is initialised to the thread id in which
<CODE>BN_BLINDING_new()</CODE> was called.

</P>
<P>
<CODE>BN_BLINDING_get_flags()</CODE> returns the BN_BLINDING flags.
Currently there are two supported flags: <STRONG>BN_BLINDING_NO_UPDATE</STRONG> and
<STRONG>BN_BLINDING_NO_RECREATE</STRONG>. <STRONG>BN_BLINDING_NO_UPDATE</STRONG> inhibits the automatic update of the <STRONG>BN_BLINDING</STRONG> parameters after each use and <STRONG>BN_BLINDING_NO_RECREATE</STRONG> inhibits the automatic re-creation of the <STRONG>BN_BLINDING</STRONG> parameters after a fixed number of uses (currently 32). In newly allocated <STRONG>BN_BLINDING</STRONG> objects no flags are set. <CODE>BN_BLINDING_set_flags()</CODE> sets the <STRONG>BN_BLINDING</STRONG> parameters flags.

</P>
<P>
<CODE>BN_BLINDING_create_param()</CODE> creates new <STRONG>BN_BLINDING</STRONG> parameters using the exponent <STRONG>e</STRONG> and the modulus <STRONG>m</STRONG>. <STRONG>bn_mod_exp</STRONG> and
<STRONG>m_ctx</STRONG> can be used to pass special functions for exponentiation (normally
<CODE>BN_mod_exp_mont()</CODE> and <STRONG>BN_MONT_CTX</STRONG>).

</P>
<P>
<HR>
<H1><A NAME="RETURN_VALUES">RETURN VALUES</A></H1>
<P>
<CODE>BN_BLINDING_new()</CODE> returns the newly allocated <STRONG>BN_BLINDING</STRONG> structure or NULL in case of an error.

</P>
<P>
<CODE>BN_BLINDING_update(),</CODE> <CODE>BN_BLINDING_convert(),</CODE>
<CODE>BN_BLINDING_invert(),</CODE> <CODE>BN_BLINDING_convert_ex()</CODE>
and <CODE>BN_BLINDING_invert_ex()</CODE> return 1 on success and 0 if an
error occured.

</P>
<P>
<CODE>BN_BLINDING_thread_id()</CODE> returns a pointer to the thread id
object within a <STRONG>BN_BLINDING</STRONG> object.

</P>
<P>
<CODE>BN_BLINDING_get_flags()</CODE> returns the currently set <STRONG>BN_BLINDING</STRONG> flags (a <STRONG>unsigned long</STRONG> value).

</P>
<P>
<CODE>BN_BLINDING_create_param()</CODE> returns the newly created <STRONG>BN_BLINDING</STRONG> 
parameters or NULL on error.

</P>
<P>
<HR>
<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
<P>
<A HREF="../crypto/bn.html#">bn(3)</A>



</P>
<P>
<HR>
<H1><A NAME="HISTORY">HISTORY</A></H1>
<P>
BN_BLINDING_thread_id was first introduced in OpenSSL 1.0.0, and it
deprecates BN_BLINDING_set_thread_id and BN_BLINDING_get_thread_id.

</P>
<P>
BN_BLINDING_convert_ex, BN_BLINDIND_invert_ex, BN_BLINDING_get_thread_id,
BN_BLINDING_set_thread_id, BN_BLINDING_set_flags, BN_BLINDING_get_flags and
BN_BLINDING_create_param were first introduced in OpenSSL 0.9.8

</P>
<P>
<HR>
<H1><A NAME="AUTHOR">AUTHOR</A></H1>
<P>
Nils Larsch for the OpenSSL project (http://www.openssl.org).

</P>
:}

