On 8/19/2015 9:03 AM, Christian Heimes wrote:
On 2015-06-29 13:45, Christian Heimes wrote:
> Patch for
https://fedorahosted.org/pki/ticket/1102
>
> b64encode() and base64.encodestring() work slightly different.
> encodestring() includes an extra newline at the end of the string. It
> seems the server treats both representations equally.
>
> I ran the KRA tests according to base/kra/functional/drmtest.readme.txt.
> The tests are passing, too.
Here is another take on my old patch. The new patch also fixes a
compatibility issue with Python 3.
As discussed on IRC, in b64encode() there's a code that converts Unicode
string data into ASCII:
if isinstance(data, six.text_type):
data = data.encode('ascii')
This conversion will not work if the string contains non-ASCII
characters, which limits the usage of this method.
It's not that Python 3's base64.b64encode() doesn't support ASCII text
as noted in the method description, but it cannot encode Unicode string
because Unicode doesn't have a binary representation unless it's encoded
first.
I think in this case the proper encoding for Unicode is UTF-8. So the
line should be changed to:
if isinstance(data, six.text_type):
data = data.encode('utf-8')
In b64decode(), the incoming data is a Unicode string containing the
base-64 encoding characters which are all ASCII, so data.encode('ascii')
will work, but to be more consistent it can also use data.encode('utf-8').
--
Endi S. Dewata