| 
									
										
										
										
											2000-09-11 09:04:09 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-09-15 04:24:56 +08:00
										 |  |  | BIO_f_base64 - base64 BIO filter | 
					
						
							| 
									
										
										
										
											2000-09-11 09:04:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-11 16:33:09 +08:00
										 |  |  | =for comment multiple includes | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-09-11 09:04:09 +08:00
										 |  |  |  #include <openssl/bio.h> | 
					
						
							|  |  |  |  #include <openssl/evp.h> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-04 04:19:49 +08:00
										 |  |  |  const BIO_METHOD *BIO_f_base64(void); | 
					
						
							| 
									
										
										
										
											2000-09-11 09:04:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BIO_f_base64() returns the base64 BIO method. This is a filter | 
					
						
							|  |  |  | BIO that base64 encodes any data written through it and decodes | 
					
						
							|  |  |  | any data read through it. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 20:11:46 +08:00
										 |  |  | Base64 BIOs do not support BIO_gets() or BIO_puts(). | 
					
						
							| 
									
										
										
										
											2000-09-11 09:04:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | BIO_flush() on a base64 BIO that is being written through is | 
					
						
							|  |  |  | used to signal that no more data is to be encoded: this is used | 
					
						
							|  |  |  | to flush the final block through the BIO. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The flag BIO_FLAGS_BASE64_NO_NL can be set with BIO_set_flags() | 
					
						
							|  |  |  | to encode the data all on one line or expect the data to be all | 
					
						
							|  |  |  | on one line. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NOTES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Because of the format of base64 encoding the end of the encoded | 
					
						
							|  |  |  | block cannot always be reliably determined. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BIO_f_base64() returns the base64 BIO method. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 EXAMPLES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Base64 encode the string "Hello World\n" and write the result | 
					
						
							|  |  |  | to standard output: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  BIO *bio, *b64; | 
					
						
							|  |  |  |  char message[] = "Hello World \n"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  b64 = BIO_new(BIO_f_base64()); | 
					
						
							|  |  |  |  bio = BIO_new_fp(stdout, BIO_NOCLOSE); | 
					
						
							| 
									
										
										
										
											2014-07-03 10:42:40 +08:00
										 |  |  |  BIO_push(b64, bio); | 
					
						
							|  |  |  |  BIO_write(b64, message, strlen(message)); | 
					
						
							|  |  |  |  BIO_flush(b64); | 
					
						
							| 
									
										
										
										
											2000-09-11 09:04:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 10:42:40 +08:00
										 |  |  |  BIO_free_all(b64); | 
					
						
							| 
									
										
										
										
											2000-09-11 09:04:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Read Base64 encoded data from standard input and write the decoded | 
					
						
							|  |  |  | data to standard output: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-05-19 07:10:46 +08:00
										 |  |  |  BIO *bio, *b64, *bio_out; | 
					
						
							| 
									
										
										
										
											2000-09-11 09:04:09 +08:00
										 |  |  |  char inbuf[512]; | 
					
						
							|  |  |  |  int inlen; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  b64 = BIO_new(BIO_f_base64()); | 
					
						
							|  |  |  |  bio = BIO_new_fp(stdin, BIO_NOCLOSE); | 
					
						
							|  |  |  |  bio_out = BIO_new_fp(stdout, BIO_NOCLOSE); | 
					
						
							| 
									
										
										
										
											2014-07-03 10:42:40 +08:00
										 |  |  |  BIO_push(b64, bio); | 
					
						
							| 
									
										
										
										
											2016-05-20 20:11:46 +08:00
										 |  |  |  while((inlen = BIO_read(b64, inbuf, 512)) > 0) | 
					
						
							|  |  |  |         BIO_write(bio_out, inbuf, inlen); | 
					
						
							| 
									
										
										
										
											2000-09-11 09:04:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 10:42:40 +08:00
										 |  |  |  BIO_flush(bio_out); | 
					
						
							|  |  |  |  BIO_free_all(b64); | 
					
						
							| 
									
										
										
										
											2000-09-11 09:04:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 BUGS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The ambiguity of EOF in base64 encoded data can cause additional | 
					
						
							|  |  |  | data following the base64 encoded block to be misinterpreted. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There should be some way of specifying a test that the BIO can perform | 
					
						
							|  |  |  | to reliably determine EOF (for example a MIME boundary). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Licensed under the OpenSSL license (the "License").  You may not use | 
					
						
							|  |  |  | 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 |