| 
									
										
										
										
											2008-04-10 19:55:57 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 20:11:46 +08:00
										 |  |  | BIO_new_CMS - CMS streaming filter BIO | 
					
						
							| 
									
										
										
										
											2008-04-10 19:55:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/cms.h> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BIO_new_CMS() returns a streaming filter BIO chain based on B<cms>. The output | 
					
						
							| 
									
										
										
										
											2008-04-11 07:28:25 +08:00
										 |  |  | of the filter is written to B<out>. Any data written to the chain is | 
					
						
							|  |  |  | automatically translated to a BER format CMS structure of the appropriate type. | 
					
						
							| 
									
										
										
										
											2008-04-10 19:55:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 NOTES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-11 07:28:25 +08:00
										 |  |  | The chain returned by this function behaves like a standard filter BIO. It | 
					
						
							|  |  |  | supports non blocking I/O. Content is processed and streamed on the fly and not | 
					
						
							| 
									
										
										
										
											2008-04-10 19:55:57 +08:00
										 |  |  | all held in memory at once: so it is possible to encode very large structures. | 
					
						
							| 
									
										
										
										
											2008-04-11 07:28:25 +08:00
										 |  |  | After all content has been written through the chain BIO_flush() must be called | 
					
						
							| 
									
										
										
										
											2008-04-10 19:55:57 +08:00
										 |  |  | to finalise the structure. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The B<CMS_STREAM> flag must be included in the corresponding B<flags> | 
					
						
							|  |  |  | parameter of the B<cms> creation function. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-11 07:28:25 +08:00
										 |  |  | If an application wishes to write additional data to B<out> BIOs should be | 
					
						
							|  |  |  | removed from the chain using BIO_pop() and freed with BIO_free() until B<out> | 
					
						
							|  |  |  | is reached. If no additional data needs to be written BIO_free_all() can be | 
					
						
							|  |  |  | called to free up the whole chain. | 
					
						
							| 
									
										
										
										
											2008-04-10 19:55:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-11 07:28:25 +08:00
										 |  |  | Any content written through the filter is used verbatim: no canonical | 
					
						
							| 
									
										
										
										
											2008-04-10 19:55:57 +08:00
										 |  |  | translation is performed. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-11 07:28:25 +08:00
										 |  |  | It is possible to chain multiple BIOs to, for example, create a triple wrapped | 
					
						
							|  |  |  | signed, enveloped, signed structure. In this case it is the applications | 
					
						
							| 
									
										
										
										
											2008-04-10 19:55:57 +08:00
										 |  |  | responsibility to set the inner content type of any outer CMS_ContentInfo | 
					
						
							|  |  |  | structures. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Large numbers of small writes through the chain should be avoided as this will | 
					
						
							|  |  |  | produce an output consisting of lots of OCTET STRING structures. Prepending | 
					
						
							|  |  |  | a BIO_f_buffer() buffering BIO will prevent this. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 BUGS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There is currently no corresponding inverse BIO: i.e. one which can decode | 
					
						
							|  |  |  | a CMS structure on the fly. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BIO_new_CMS() returns a BIO chain when successful or NULL if an error | 
					
						
							|  |  |  | occurred. The error can be obtained from ERR_get_error(3). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 SEE ALSO | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | L<ERR_get_error(3)>, L<CMS_sign(3)>, | 
					
						
							|  |  |  | L<CMS_encrypt(3)> | 
					
						
							| 
									
										
										
										
											2008-04-10 19:55:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-09 08:02:36 +08:00
										 |  |  | The BIO_new_CMS() function was added in OpenSSL 1.0.0. | 
					
						
							| 
									
										
										
										
											2008-04-10 19:55:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 |