diff --git a/letsencrypt/client/le_util.py b/letsencrypt/client/le_util.py index 31edfd13b..8a87d7c09 100644 --- a/letsencrypt/client/le_util.py +++ b/letsencrypt/client/le_util.py @@ -97,7 +97,7 @@ def jose_b64decode(arg, decoding='utf-8'): """JOSE Base64 decode. :param arg: Base64 string to be decoded. - :type arg: str + :type arg: str or unicode :param decoding: Name of the encoding to be performed after Base64 decoding. @@ -107,5 +107,6 @@ def jose_b64decode(arg, decoding='utf-8'): :rtype: str or unicode """ - decoded = base64.urlsafe_b64decode(arg + '=' * (4 - (len(arg) % 4))) + ascii = arg.encode('ascii') # equivalent to str(arg), for unicode input + decoded = base64.urlsafe_b64decode(ascii + '=' * (4 - (len(ascii) % 4))) return decoded if decoding is None else decoded.decode(decoding) diff --git a/letsencrypt/client/le_util_test.py b/letsencrypt/client/le_util_test.py index 7f8bc8c58..6c2714a8d 100644 --- a/letsencrypt/client/le_util_test.py +++ b/letsencrypt/client/le_util_test.py @@ -126,6 +126,9 @@ class JOSEB64DecodeTest(unittest.TestCase): def test_with_encoding(self): self.assertEqual(self._call('xIU=', 'utf-8'), u'\u0105') + def test_unicode(self): + self.assertEqual(self._call(u'YQ', None), 'a') + if __name__ == '__main__': unittest.main()