From a3f77ee371f64dbea0b21866c4e97130504491e1 Mon Sep 17 00:00:00 2001 From: Serghei Mihai Date: Thu, 16 Jul 2015 16:44:38 +0200 Subject: [PATCH] fix key type in request signing (#7866) --- passerelle/base/signature.py | 2 ++ passerelle/base/tests.py | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 passerelle/base/tests.py diff --git a/passerelle/base/signature.py b/passerelle/base/signature.py index 153785a..b1d5f9d 100644 --- a/passerelle/base/signature.py +++ b/passerelle/base/signature.py @@ -33,6 +33,8 @@ def sign_query(query, key, algo='sha256', timestamp=None, nonce=None): def sign_string(s, key, algo='sha256', timedelta=30): digestmod = getattr(hashlib, algo) + if isinstance(key, unicode): + key = key.encode('utf-8') hash = hmac.HMAC(key, digestmod=digestmod, msg=s) return hash.digest() diff --git a/passerelle/base/tests.py b/passerelle/base/tests.py new file mode 100644 index 0000000..04806ff --- /dev/null +++ b/passerelle/base/tests.py @@ -0,0 +1,23 @@ +import base64 + +from django.test import TestCase + +from . import signature + +class SignatureTestCase(TestCase): + def setUp(self): + self.key = '12345' + self.message = 'orig=passerelle&NameID=secret' + self.algo = 'sha1' + + def test_sign_string_with_string_key(self): + encoded = base64.b64encode(signature.sign_string(self.message, self.key)) + self.assertEqual(encoded, 'JC6K3+PCt3YKxZ9eCtEOoF+JfzQBmMeZvvxJ6VhXUXY=') + + def test_sign_string_with_string_key_sha1(self): + encoded = base64.b64encode(signature.sign_string(self.message, self.key, algo=self.algo)) + self.assertEqual(encoded, 'lOt5eyEvLJDTVl11pSqOPDJImgM=') + + def test_sign_string_with_unicode_key(self): + encoded = base64.b64encode(signature.sign_string(self.message, unicode(self.key))) + self.assertEqual(encoded, 'JC6K3+PCt3YKxZ9eCtEOoF+JfzQBmMeZvvxJ6VhXUXY=') -- 2.1.4