| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-30 00:03:53 +08:00
										 |  |  | BN_CTX_new_ex, BN_CTX_new, BN_CTX_secure_new_ex, BN_CTX_secure_new, BN_CTX_free | 
					
						
							|  |  |  | - allocate and free BN_CTX structures | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/bn.h> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-30 00:03:53 +08:00
										 |  |  |  BN_CTX *BN_CTX_new_ex(OPENSSL_CTX *ctx); | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  |  BN_CTX *BN_CTX_new(void); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-30 00:03:53 +08:00
										 |  |  |  BN_CTX *BN_CTX_secure_new_ex(OPENSSL_CTX *ctx); | 
					
						
							| 
									
										
										
										
											2015-04-25 04:39:40 +08:00
										 |  |  |  BN_CTX *BN_CTX_secure_new(void); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-13 06:42:08 +08:00
										 |  |  |  void BN_CTX_free(BN_CTX *c); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-30 09:39:40 +08:00
										 |  |  | A B<BN_CTX> is a structure that holds B<BIGNUM> temporary variables used by | 
					
						
							|  |  |  | library functions. Since dynamic memory allocation to create B<BIGNUM>s | 
					
						
							|  |  |  | is rather expensive when used in conjunction with repeated subroutine | 
					
						
							|  |  |  | calls, the B<BN_CTX> structure is used. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-30 00:03:53 +08:00
										 |  |  | BN_CTX_new_ex() allocates and initializes a B<BN_CTX> structure for the given | 
					
						
							|  |  |  | library context B<ctx>. The <ctx> value may be NULL in which case the default | 
					
						
							|  |  |  | library context will be used. BN_CTX_new() is the same as BN_CTX_new_ex() except | 
					
						
							|  |  |  | that the default library context is always used. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BN_CTX_secure_new_ex() allocates and initializes a B<BN_CTX> structure | 
					
						
							| 
									
										
										
										
											2015-04-25 04:39:40 +08:00
										 |  |  | but uses the secure heap (see L<CRYPTO_secure_malloc(3)>) to hold the | 
					
						
							| 
									
										
										
										
											2019-05-30 00:03:53 +08:00
										 |  |  | B<BIGNUM>s for the given library context B<ctx>. The <ctx> value may be NULL in | 
					
						
							|  |  |  | which case the default library context will be used. BN_CTX_secure_new() is the | 
					
						
							|  |  |  | same as BN_CTX_secure_new_ex() except that the default library context is always | 
					
						
							|  |  |  | used. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-15 00:47:02 +08:00
										 |  |  | BN_CTX_free() frees the components of the B<BN_CTX> and the structure itself. | 
					
						
							|  |  |  | Since BN_CTX_start() is required in order to obtain B<BIGNUM>s from the | 
					
						
							|  |  |  | B<BN_CTX>, in most cases BN_CTX_end() must be called before the B<BN_CTX> may | 
					
						
							|  |  |  | be freed by BN_CTX_free().  If B<c> is NULL, nothing is done. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A given B<BN_CTX> must only be used by a single thread of execution.  No | 
					
						
							|  |  |  | locking is performed, and the internal pool allocator will not properly handle | 
					
						
							|  |  |  | multiple threads of execution. | 
					
						
							| 
									
										
										
										
											2000-02-06 03:29:00 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-25 04:39:40 +08:00
										 |  |  | BN_CTX_new() and BN_CTX_secure_new() return a pointer to the B<BN_CTX>. | 
					
						
							|  |  |  | If the allocation fails, | 
					
						
							|  |  |  | they return B<NULL> and sets an error code that can be obtained by | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | L<ERR_get_error(3)>. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-03 03:45:04 +08:00
										 |  |  | BN_CTX_free() has no return values. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 REMOVED FUNCTIONALITY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  void BN_CTX_init(BN_CTX *c); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BN_CTX_init() is no longer available as of OpenSSL 1.1.0. Applications should | 
					
						
							|  |  |  | replace use of BN_CTX_init with BN_CTX_new instead: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  BN_CTX *ctx; | 
					
						
							|  |  |  |  ctx = BN_CTX_new(); | 
					
						
							| 
									
										
										
										
											2016-11-19 07:10:05 +08:00
										 |  |  |  if (!ctx) | 
					
						
							|  |  |  |      /* error */ | 
					
						
							| 
									
										
										
										
											2014-11-03 03:45:04 +08:00
										 |  |  |  ... | 
					
						
							|  |  |  |  BN_CTX_free(ctx); | 
					
						
							| 
									
										
										
										
											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_start(3)> | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-28 01:40:11 +08:00
										 |  |  | BN_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 |