@@ -68,7 +68,7 @@ def b64encode(s, altchars=None, *, padded=True, wrapcol=0):
6868
6969
7070def b64decode (s , altchars = None , validate = _NOT_SPECIFIED ,
71- * , padded = True , ignorechars = _NOT_SPECIFIED ):
71+ * , padded = True , ignorechars = _NOT_SPECIFIED , canonical = False ):
7272 """Decode the Base64 encoded bytes-like object or ASCII string s.
7373
7474 Optional altchars must be a bytes-like object or ASCII string of length 2
@@ -110,11 +110,13 @@ def b64decode(s, altchars=None, validate=_NOT_SPECIFIED,
110110 alphabet = binascii .BASE64_ALPHABET [:- 2 ] + altchars
111111 return binascii .a2b_base64 (s , strict_mode = validate ,
112112 alphabet = alphabet ,
113- padded = padded , ignorechars = ignorechars )
113+ padded = padded , ignorechars = ignorechars ,
114+ canonical = canonical )
114115 if ignorechars is _NOT_SPECIFIED :
115116 ignorechars = b''
116117 result = binascii .a2b_base64 (s , strict_mode = validate ,
117- padded = padded , ignorechars = ignorechars )
118+ padded = padded , ignorechars = ignorechars ,
119+ canonical = canonical )
118120 if badchar is not None :
119121 import warnings
120122 if validate :
@@ -230,7 +232,8 @@ def b32encode(s, *, padded=True, wrapcol=0):
230232 return binascii .b2a_base32 (s , padded = padded , wrapcol = wrapcol )
231233b32encode .__doc__ = _B32_ENCODE_DOCSTRING .format (encoding = 'base32' )
232234
233- def b32decode (s , casefold = False , map01 = None , * , padded = True , ignorechars = b'' ):
235+ def b32decode (s , casefold = False , map01 = None , * , padded = True , ignorechars = b'' ,
236+ canonical = False ):
234237 s = _bytes_from_decode_data (s )
235238 # Handle section 2.4 zero and one mapping. The flag map01 will be either
236239 # False, or the character to map the digit 1 (one) to. It should be
@@ -241,7 +244,8 @@ def b32decode(s, casefold=False, map01=None, *, padded=True, ignorechars=b''):
241244 s = s .translate (bytes .maketrans (b'01' , b'O' + map01 ))
242245 if casefold :
243246 s = s .upper ()
244- return binascii .a2b_base32 (s , padded = padded , ignorechars = ignorechars )
247+ return binascii .a2b_base32 (s , padded = padded , ignorechars = ignorechars ,
248+ canonical = canonical )
245249b32decode .__doc__ = _B32_DECODE_DOCSTRING .format (encoding = 'base32' ,
246250 extra_args = _B32_DECODE_MAP01_DOCSTRING )
247251
@@ -250,13 +254,15 @@ def b32hexencode(s, *, padded=True, wrapcol=0):
250254 alphabet = binascii .BASE32HEX_ALPHABET )
251255b32hexencode .__doc__ = _B32_ENCODE_DOCSTRING .format (encoding = 'base32hex' )
252256
253- def b32hexdecode (s , casefold = False , * , padded = True , ignorechars = b'' ):
257+ def b32hexdecode (s , casefold = False , * , padded = True , ignorechars = b'' ,
258+ canonical = False ):
254259 s = _bytes_from_decode_data (s )
255260 # base32hex does not have the 01 mapping
256261 if casefold :
257262 s = s .upper ()
258263 return binascii .a2b_base32 (s , alphabet = binascii .BASE32HEX_ALPHABET ,
259- padded = padded , ignorechars = ignorechars )
264+ padded = padded , ignorechars = ignorechars ,
265+ canonical = canonical )
260266b32hexdecode .__doc__ = _B32_DECODE_DOCSTRING .format (encoding = 'base32hex' ,
261267 extra_args = '' )
262268
@@ -324,7 +330,8 @@ def a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False):
324330 return binascii .b2a_ascii85 (b , foldspaces = foldspaces ,
325331 adobe = adobe , wrapcol = wrapcol , pad = pad )
326332
327- def a85decode (b , * , foldspaces = False , adobe = False , ignorechars = b' \t \n \r \v ' ):
333+ def a85decode (b , * , foldspaces = False , adobe = False , ignorechars = b' \t \n \r \v ' ,
334+ canonical = False ):
328335 """Decode the Ascii85 encoded bytes-like object or ASCII string b.
329336
330337 foldspaces is a flag that specifies whether the 'y' short sequence should be
@@ -338,10 +345,13 @@ def a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v'):
338345 input. This should only contain whitespace characters, and by default
339346 contains all whitespace characters in ASCII.
340347
348+ If canonical is true, non-canonical encodings are rejected.
349+
341350 The result is returned as a bytes object.
342351 """
343352 return binascii .a2b_ascii85 (b , foldspaces = foldspaces ,
344- adobe = adobe , ignorechars = ignorechars )
353+ adobe = adobe , ignorechars = ignorechars ,
354+ canonical = canonical )
345355
346356def b85encode (b , pad = False , * , wrapcol = 0 ):
347357 """Encode bytes-like object b in base85 format and return a bytes object.
@@ -354,12 +364,15 @@ def b85encode(b, pad=False, *, wrapcol=0):
354364 """
355365 return binascii .b2a_base85 (b , wrapcol = wrapcol , pad = pad )
356366
357- def b85decode (b , * , ignorechars = b'' ):
367+ def b85decode (b , * , ignorechars = b'' , canonical = False ):
358368 """Decode the base85-encoded bytes-like object or ASCII string b
359369
370+ If canonical is true, non-canonical encodings are rejected.
371+
360372 The result is returned as a bytes object.
361373 """
362- return binascii .a2b_base85 (b , ignorechars = ignorechars )
374+ return binascii .a2b_base85 (b , ignorechars = ignorechars ,
375+ canonical = canonical )
363376
364377def z85encode (s , pad = False , * , wrapcol = 0 ):
365378 """Encode bytes-like object b in z85 format and return a bytes object.
@@ -373,12 +386,15 @@ def z85encode(s, pad=False, *, wrapcol=0):
373386 return binascii .b2a_base85 (s , wrapcol = wrapcol , pad = pad ,
374387 alphabet = binascii .Z85_ALPHABET )
375388
376- def z85decode (s , * , ignorechars = b'' ):
389+ def z85decode (s , * , ignorechars = b'' , canonical = False ):
377390 """Decode the z85-encoded bytes-like object or ASCII string b
378391
392+ If canonical is true, non-canonical encodings are rejected.
393+
379394 The result is returned as a bytes object.
380395 """
381- return binascii .a2b_base85 (s , alphabet = binascii .Z85_ALPHABET , ignorechars = ignorechars )
396+ return binascii .a2b_base85 (s , alphabet = binascii .Z85_ALPHABET ,
397+ ignorechars = ignorechars , canonical = canonical )
382398
383399# Legacy interface. This code could be cleaned up since I don't believe
384400# binascii has any line length limitations. It just doesn't seem worth it
0 commit comments