From f93c8c6ad41d38ccd19335a5a0a396cbaa409caf Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Sat, 5 Jan 2019 07:09:28 -0800 Subject: [PATCH] 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(). --- dns/tsigkeyring.py | 7 ++++--- tests/test_tsigkeyring.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 tests/test_tsigkeyring.py 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) -- 2.47.3