Add encoding to keys in compute_signature

Unlike fixed sample keys as counter_name and counter_volume,
metadata keys may contain unicode characters.
ceilometer.publisher.utils.compute_signature can't calculate
signature of unicode symbols and crashes.
In this patch encoding keys is added.

Change-Id: I94d02ce20999510e9c6aaf33f7ee503bbb350e87
Closes-bug: #1391517
This commit is contained in:
Ilya Tyaptin 2014-11-11 17:17:04 +04:00
parent 1c8e3dea7c
commit 0527669052
2 changed files with 11 additions and 1 deletions

View File

@ -48,7 +48,7 @@ def compute_signature(message, secret):
# Skip any existing signature value, which would not have
# been part of the original message.
continue
digest_maker.update(name)
digest_maker.update(six.text_type(name).encode('utf-8'))
digest_maker.update(six.text_type(value).encode('utf-8'))
return digest_maker.hexdigest()

View File

@ -111,6 +111,16 @@ class TestSignature(base.BaseTestCase):
jsondata = jsonutils.loads(jsonutils.dumps(data))
self.assertTrue(utils.verify_signature(jsondata, 'not-so-secret'))
def test_verify_unicode_symbols(self):
data = {u'a\xe9\u0437': 'A',
'b': u'B\xe9\u0437'
}
data['message_signature'] = utils.compute_signature(
data,
'not-so-secret')
jsondata = jsonutils.loads(jsonutils.dumps(data))
self.assertTrue(utils.verify_signature(jsondata, 'not-so-secret'))
def test_besteffort_compare_digest(self):
hash1 = "f5ac3fe42b80b80f979825d177191bc5"
hash2 = "f5ac3fe42b80b80f979825d177191bc5"