From ec6e51c801df836f0bff443bba61e9fdd9c0db06 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Wed, 4 Feb 2015 13:55:21 -0800 Subject: [PATCH] Fixing JSON key service account assertions in Python3. Fixes #125. NOTE: '%s.%s' does not behave the same between versions and should be removed throughout this library. I will be following this up with a set of regression tests (hopefully some of which will fail) and we can assess the damage of other uses of '%s'. --- oauth2client/service_account.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/oauth2client/service_account.py b/oauth2client/service_account.py index 0353258e9..d1d1d8956 100644 --- a/oauth2client/service_account.py +++ b/oauth2client/service_account.py @@ -75,16 +75,14 @@ def _generate_assertion(self): } payload.update(self._kwargs) - assertion_input = '%s.%s' % ( - _urlsafe_b64encode(header), - _urlsafe_b64encode(payload)) - assertion_input = assertion_input.encode('utf-8') + assertion_input = (_urlsafe_b64encode(header) + b'.' + + _urlsafe_b64encode(payload)) # Sign the assertion. - signature = bytes.decode(base64.urlsafe_b64encode(rsa.pkcs1.sign( - assertion_input, self._private_key, 'SHA-256'))).rstrip('=') + rsa_bytes = rsa.pkcs1.sign(assertion_input, self._private_key, 'SHA-256') + signature = base64.urlsafe_b64encode(rsa_bytes).rstrip(b'=') - return '%s.%s' % (assertion_input, signature) + return assertion_input + b'.' + signature def sign_blob(self, blob): # Ensure that it is bytes