| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-29 04:50:03 +08:00
										 |  |  | BN_mod_mul_reciprocal, BN_div_recp, BN_RECP_CTX_new, | 
					
						
							| 
									
										
										
										
											2000-02-24 19:55:57 +08:00
										 |  |  | BN_RECP_CTX_free, BN_RECP_CTX_set - modular multiplication using | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | reciprocal | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/bn.h> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  BN_RECP_CTX *BN_RECP_CTX_new(void); | 
					
						
							|  |  |  |  void BN_RECP_CTX_free(BN_RECP_CTX *recp); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *m, BN_CTX *ctx); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-22 14:01:36 +08:00
										 |  |  |  int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *a, BN_RECP_CTX *recp, | 
					
						
							| 
									
										
										
										
											2017-01-21 02:58:49 +08:00
										 |  |  |                  BN_CTX *ctx); | 
					
						
							| 
									
										
										
										
											2000-02-06 23:56:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-22 14:01:36 +08:00
										 |  |  |  int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, | 
					
						
							| 
									
										
										
										
											2017-01-21 02:58:49 +08:00
										 |  |  |                            BN_RECP_CTX *recp, BN_CTX *ctx); | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BN_mod_mul_reciprocal() can be used to perform an efficient | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | L<BN_mod_mul(3)> operation when the operation will be performed | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | repeatedly with the same modulus. It computes B<r>=(B<a>*B<b>)%B<m> | 
					
						
							|  |  |  | using B<recp>=1/B<m>, which is set as described below.  B<ctx> is a | 
					
						
							|  |  |  | previously allocated B<BN_CTX> used for temporary variables. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BN_RECP_CTX_new() allocates and initializes a B<BN_RECP> structure. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BN_RECP_CTX_free() frees the components of the B<BN_RECP>, and, if it | 
					
						
							|  |  |  | was created by BN_RECP_CTX_new(), also the structure itself. | 
					
						
							| 
									
										
										
										
											2015-05-01 09:37:06 +08:00
										 |  |  | If B<recp> is NULL, nothing is done. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-06 23:56:59 +08:00
										 |  |  | BN_RECP_CTX_set() stores B<m> in B<recp> and sets it up for computing | 
					
						
							|  |  |  | 1/B<m> and shifting it left by BN_num_bits(B<m>)+1 to make it an | 
					
						
							|  |  |  | integer. The result and the number of bits it was shifted left will | 
					
						
							|  |  |  | later be stored in B<recp>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BN_div_recp() divides B<a> by B<m> using B<recp>. It places the quotient | 
					
						
							|  |  |  | in B<dv> and the remainder in B<rem>. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-03 03:45:04 +08:00
										 |  |  | The B<BN_RECP_CTX> structure cannot be shared between threads. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BN_RECP_CTX_new() returns the newly allocated B<BN_RECP_CTX>, and NULL | 
					
						
							|  |  |  | on error. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-21 19:03:34 +08:00
										 |  |  | BN_RECP_CTX_free() has no return value. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | For the other functions, 1 is returned for success, 0 on error. | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | The error codes can be obtained by L<ERR_get_error(3)>. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SEE ALSO | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-11 21:56:44 +08:00
										 |  |  | L<ERR_get_error(3)>, L<BN_add(3)>, | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | L<BN_CTX_new(3)> | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-21 19:03:34 +08:00
										 |  |  | BN_RECP_CTX_init() was removed in OpenSSL 1.1.0 | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-11 21:56:44 +08:00
										 |  |  | Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-06 21:04:44 +08:00
										 |  |  | Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | this file except in compliance with the License.  You can obtain a copy | 
					
						
							|  |  |  | in the file LICENSE in the source distribution or at | 
					
						
							|  |  |  | L<https://www.openssl.org/source/license.html>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =cut |