| 
									
										
										
										
											1998-08-10 19:42:37 +00:00
										 |  |  | \section{\module{base64} --- | 
					
						
							| 
									
										
										
										
											2004-01-04 01:14:01 +00:00
										 |  |  | 	 RFC 3548: Base16, Base32, Base64 Data Encodings} | 
					
						
							| 
									
										
										
										
											1999-02-22 13:45:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | \declaremodule{standard}{base64} | 
					
						
							| 
									
										
										
										
											2004-01-04 01:14:01 +00:00
										 |  |  | \modulesynopsis{RFC 3548: Base16, Base32, Base64 Data Encodings} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-02 16:24:29 +00:00
										 |  |  | \indexii{base64}{encoding} | 
					
						
							|  |  |  | \index{MIME!base64 encoding} | 
					
						
							| 
									
										
										
										
											1997-04-27 21:25:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-01-04 01:14:01 +00:00
										 |  |  | This module provides data encoding and decoding as specified in | 
					
						
							|  |  |  | \rfc{3548}.  This standard defines the Base16, Base32, and Base64 | 
					
						
							|  |  |  | algorithms for encoding and decoding arbitrary binary strings into | 
					
						
							|  |  |  | text strings that can be safely sent by email, used as parts of URLs, | 
					
						
							| 
									
										
										
										
											2004-12-12 16:52:40 +00:00
										 |  |  | or included as part of an HTTP POST request.  The encoding algorithm is | 
					
						
							| 
									
										
										
										
											2004-01-04 01:14:01 +00:00
										 |  |  | not the same as the \program{uuencode} program. | 
					
						
							| 
									
										
										
										
											1997-04-27 21:25:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-01-04 01:14:01 +00:00
										 |  |  | There are two interfaces provided by this module.  The modern | 
					
						
							|  |  |  | interface supports encoding and decoding string objects using all | 
					
						
							|  |  |  | three alphabets.  The legacy interface provides for encoding and | 
					
						
							|  |  |  | decoding to and from file-like objects as well as strings, but only | 
					
						
							|  |  |  | using the Base64 standard alphabet. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The modern interface provides: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{b64encode}{s\optional{, altchars}} | 
					
						
							|  |  |  | Encode a string use Base64. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \var{s} is the string to encode.  Optional \var{altchars} must be a | 
					
						
							|  |  |  | string of at least length 2 (additional characters are ignored) which | 
					
						
							|  |  |  | specifies an alternative alphabet for the \code{+} and \code{/} | 
					
						
							|  |  |  | characters.  This allows an application to e.g. generate URL or | 
					
						
							|  |  |  | filesystem safe Base64 strings.  The default is \code{None}, for which | 
					
						
							|  |  |  | the standard Base64 alphabet is used. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The encoded string is returned. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{b64decode}{s\optional{, altchars}} | 
					
						
							|  |  |  | Decode a Base64 encoded string. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \var{s} is the string to decode.  Optional \var{altchars} must be a | 
					
						
							|  |  |  | string of at least length 2 (additional characters are ignored) which | 
					
						
							|  |  |  | specifies the alternative alphabet used instead of the \code{+} and | 
					
						
							|  |  |  | \code{/} characters. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The decoded string is returned.  A \exception{TypeError} is raised if | 
					
						
							|  |  |  | \var{s} were incorrectly padded or if there are non-alphabet | 
					
						
							|  |  |  | characters present in the string. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{standard_b64encode}{s} | 
					
						
							|  |  |  | Encode string \var{s} using the standard Base64 alphabet. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{standard_b64decode}{s} | 
					
						
							|  |  |  | Decode string \var{s} using the standard Base64 alphabet. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{urlsafe_b64encode}{s} | 
					
						
							|  |  |  | Encode string \var{s} using a URL-safe alphabet, which substitutes | 
					
						
							|  |  |  | \code{-} instead of \code{+} and \code{_} instead of \code{/} in the | 
					
						
							|  |  |  | standard Base64 alphabet. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{urlsafe_b64decode}{s} | 
					
						
							|  |  |  | Decode string \var{s} using a URL-safe alphabet, which substitutes | 
					
						
							|  |  |  | \code{-} instead of \code{+} and \code{_} instead of \code{/} in the | 
					
						
							|  |  |  | standard Base64 alphabet. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{b32encode}{s} | 
					
						
							|  |  |  | Encode a string using Base32.  \var{s} is the string to encode.  The | 
					
						
							|  |  |  | encoded string is returned. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{b32decode}{s\optional{, casefold\optional{, map01}}} | 
					
						
							|  |  |  | Decode a Base32 encoded string. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \var{s} is the string to decode.  Optional \var{casefold} is a flag | 
					
						
							|  |  |  | specifying whether a lowercase alphabet is acceptable as input.  For | 
					
						
							|  |  |  | security purposes, the default is \code{False}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \rfc{3548} allows for optional mapping of the digit 0 (zero) to the | 
					
						
							|  |  |  | letter O (oh), and for optional mapping of the digit 1 (one) to either | 
					
						
							|  |  |  | the letter I (eye) or letter L (el).  The optional argument | 
					
						
							|  |  |  | \var{map01} when not \code{None}, specifies which letter the digit 1 should | 
					
						
							|  |  |  | be mapped to (when map01 is not \var{None}, the digit 0 is always | 
					
						
							|  |  |  | mapped to the letter O).  For security purposes the default is | 
					
						
							|  |  |  | \code{None}, so that 0 and 1 are not allowed in the input. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The decoded string is returned.  A \exception{TypeError} is raised if | 
					
						
							|  |  |  | \var{s} were incorrectly padded or if there are non-alphabet characters | 
					
						
							|  |  |  | present in the string. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{b16encode}{s} | 
					
						
							|  |  |  | Encode a string using Base16. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \var{s} is the string to encode.  The encoded string is returned. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{b16decode}{s\optional{, casefold}} | 
					
						
							|  |  |  | Decode a Base16 encoded string. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \var{s} is the string to decode.  Optional \var{casefold} is a flag | 
					
						
							|  |  |  | specifying whether a lowercase alphabet is acceptable as input.  For | 
					
						
							|  |  |  | security purposes, the default is \code{False}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The decoded string is returned.  A \exception{TypeError} is raised if | 
					
						
							|  |  |  | \var{s} were incorrectly padded or if there are non-alphabet | 
					
						
							|  |  |  | characters present in the string. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The legacy interface: | 
					
						
							| 
									
										
										
										
											1997-11-30 05:53:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-01-07 03:47:10 +00:00
										 |  |  | \begin{funcdesc}{decode}{input, output} | 
					
						
							| 
									
										
										
										
											1997-04-27 21:25:52 +00:00
										 |  |  | Decode the contents of the \var{input} file and write the resulting | 
					
						
							|  |  |  | binary data to the \var{output} file. | 
					
						
							|  |  |  | \var{input} and \var{output} must either be file objects or objects that | 
					
						
							|  |  |  | mimic the file object interface. \var{input} will be read until | 
					
						
							|  |  |  | \code{\var{input}.read()} returns an empty string. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{decodestring}{s} | 
					
						
							|  |  |  | Decode the string \var{s}, which must contain one or more lines of | 
					
						
							| 
									
										
										
										
											1998-04-02 16:24:29 +00:00
										 |  |  | base64 encoded data, and return a string containing the resulting | 
					
						
							| 
									
										
										
										
											1997-04-27 21:25:52 +00:00
										 |  |  | binary data. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-01-07 03:47:10 +00:00
										 |  |  | \begin{funcdesc}{encode}{input, output} | 
					
						
							| 
									
										
										
										
											1997-04-27 21:25:52 +00:00
										 |  |  | Encode the contents of the \var{input} file and write the resulting | 
					
						
							| 
									
										
										
										
											1998-04-02 16:24:29 +00:00
										 |  |  | base64 encoded data to the \var{output} file. | 
					
						
							| 
									
										
										
										
											1997-04-27 21:25:52 +00:00
										 |  |  | \var{input} and \var{output} must either be file objects or objects that | 
					
						
							|  |  |  | mimic the file object interface. \var{input} will be read until | 
					
						
							| 
									
										
										
										
											2002-05-16 04:28:44 +00:00
										 |  |  | \code{\var{input}.read()} returns an empty string.  \function{encode()} | 
					
						
							|  |  |  | returns the encoded data plus a trailing newline character | 
					
						
							|  |  |  | (\code{'\e n'}). | 
					
						
							| 
									
										
										
										
											1997-04-27 21:25:52 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{encodestring}{s} | 
					
						
							|  |  |  | Encode the string \var{s}, which can contain arbitrary binary data, | 
					
						
							|  |  |  | and return a string containing one or more lines of | 
					
						
							| 
									
										
										
										
											2002-05-16 04:28:44 +00:00
										 |  |  | base64-encoded data.  \function{encodestring()} returns a | 
					
						
							|  |  |  | string containing one or more lines of base64-encoded data | 
					
						
							|  |  |  | always including an extra trailing newline (\code{'\e n'}). | 
					
						
							| 
									
										
										
										
											1997-04-27 21:25:52 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							| 
									
										
										
										
											1999-04-23 15:52:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{seealso} | 
					
						
							| 
									
										
										
										
											2001-11-28 07:26:15 +00:00
										 |  |  |   \seemodule{binascii}{Support module containing \ASCII-to-binary | 
					
						
							| 
									
										
										
										
											2000-10-18 17:43:06 +00:00
										 |  |  |                        and binary-to-\ASCII{} conversions.} | 
					
						
							| 
									
										
										
										
											2001-04-12 16:47:17 +00:00
										 |  |  |   \seerfc{1521}{MIME (Multipurpose Internet Mail Extensions) Part One: | 
					
						
							|  |  |  |           Mechanisms for Specifying and Describing the Format of | 
					
						
							|  |  |  |           Internet Message Bodies}{Section 5.2, ``Base64 | 
					
						
							|  |  |  |           Content-Transfer-Encoding,'' provides the definition of the | 
					
						
							|  |  |  |           base64 encoding.} | 
					
						
							| 
									
										
										
										
											1999-04-23 15:52:18 +00:00
										 |  |  | \end{seealso} |