From: Bob Halley Date: Sat, 5 Jan 2019 15:09:28 +0000 (-0800) Subject: Use base64.decodebytes() and base64.encodebytes(). [Issue #338] X-Git-Tag: v2.0.0rc1~385 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f93c8c6ad41d38ccd19335a5a0a396cbaa409caf;p=thirdparty%2Fdnspython.git Use base64.decodebytes() and base64.encodebytes(). [Issue #338] This commit also adds test coverage for tsigkeyring, and fixes to_text() on python 3, which had never worked properly due to an extra .decode(). --- diff --git a/dns/tsigkeyring.py b/dns/tsigkeyring.py index db8c59fa..32baf803 100644 --- a/dns/tsigkeyring.py +++ b/dns/tsigkeyring.py @@ -30,7 +30,7 @@ def from_text(textring): keyring = {} for keytext in textring: keyname = dns.name.from_text(keytext) - secret = base64.decodestring(textring[keytext].encode()) + secret = base64.decodebytes(textring[keytext].encode()) keyring[keyname] = secret return keyring @@ -42,7 +42,8 @@ def to_text(keyring): textring = {} for keyname in keyring: - keytext = keyname.to_text().decode() - secret = base64.encodestring(keyring[keyname]).decode() + keytext = keyname.to_text() + # rstrip to get rid of the \n encoding adds + secret = base64.encodebytes(keyring[keyname]).decode().rstrip() textring[keytext] = secret return textring diff --git a/tests/test_tsigkeyring.py b/tests/test_tsigkeyring.py new file mode 100644 index 00000000..ce8888d9 --- /dev/null +++ b/tests/test_tsigkeyring.py @@ -0,0 +1,33 @@ +# Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license + +import base64 +import unittest + +import dns.tsigkeyring + +text_keyring = { + 'keyname.' : 'NjHwPsMKjdN++dOfE5iAiQ==' +} + +rich_keyring = { + dns.name.from_text('keyname.') : \ + base64.decodebytes('NjHwPsMKjdN++dOfE5iAiQ=='.encode()) +} + +class TSIGKeyRingTestCase(unittest.TestCase): + + def test_from_text(self): + """text keyring -> rich keyring""" + rkeyring = dns.tsigkeyring.from_text(text_keyring) + self.assertEqual(rkeyring, rich_keyring) + + def test_to_text(self): + """text keyring -> rich keyring -> text keyring""" + tkeyring = dns.tsigkeyring.to_text(rich_keyring) + self.assertEqual(tkeyring, text_keyring) + + def test_from_and_to_text(self): + """text keyring -> rich keyring -> text keyring""" + rkeyring = dns.tsigkeyring.from_text(text_keyring) + tkeyring = dns.tsigkeyring.to_text(rkeyring) + self.assertEqual(tkeyring, text_keyring)