KMS encryption under Python 3 (#826)

This upgrades the KMS encrypt and decrypt endpoints to work
under both Python 2 and 3
This commit is contained in:
Jack Danger 2017-02-09 19:36:24 -08:00 committed by Steve Pulec
parent fd7b8e7c88
commit 53fbd7dca0
2 changed files with 20 additions and 20 deletions

View File

@ -3,6 +3,7 @@ from __future__ import unicode_literals
import base64 import base64
import json import json
import re import re
import six
from boto.exception import JSONResponseError from boto.exception import JSONResponseError
from boto.kms.exceptions import AlreadyExistsException, NotFoundException from boto.kms.exceptions import AlreadyExistsException, NotFoundException
@ -220,11 +221,14 @@ class KmsResponse(BaseResponse):
decode it in decrypt(). decode it in decrypt().
""" """
value = self.parameters.get("Plaintext") value = self.parameters.get("Plaintext")
return json.dumps({"CiphertextBlob": base64.b64encode(value).encode("utf-8")}) if isinstance(value, six.text_type):
value = value.encode('utf-8')
return json.dumps({"CiphertextBlob": base64.b64encode(value).decode("utf-8")})
def decrypt(self): def decrypt(self):
value = self.parameters.get("CiphertextBlob") value = self.parameters.get("CiphertextBlob")
return json.dumps({"Plaintext": base64.b64decode(value).encode("utf-8")}) print("value 3", value)
return json.dumps({"Plaintext": base64.b64decode(value).decode("utf-8")})
def _assert_valid_key_id(key_id): def _assert_valid_key_id(key_id):

View File

@ -1,6 +1,5 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import re import re
import six
import boto.kms import boto.kms
from boto.exception import JSONResponseError from boto.exception import JSONResponseError
@ -137,25 +136,22 @@ def test_disable_key_rotation():
conn.get_key_rotation_status(key_id)['KeyRotationEnabled'].should.equal(False) conn.get_key_rotation_status(key_id)['KeyRotationEnabled'].should.equal(False)
# Scoping encryption/decryption to only Python 2 because our test suite @mock_kms
# hardcodes a dependency on boto version 2.36.0 which is not compatible with def test_encrypt():
# Python 3 (2.40+, however, passes these tests). """
if six.PY2: test_encrypt
@mock_kms Using base64 encoding to merely test that the endpoint was called
def test_encrypt(): """
""" conn = boto.kms.connect_to_region("us-west-2")
Using base64 encoding to merely test that the endpoint was called response = conn.encrypt('key_id', 'encryptme'.encode('utf-8'))
""" response['CiphertextBlob'].should.equal(b'ZW5jcnlwdG1l')
conn = boto.kms.connect_to_region("us-west-2")
response = conn.encrypt('key_id', 'encryptme'.encode('utf-8'))
response['CiphertextBlob'].should.equal('ZW5jcnlwdG1l')
@mock_kms @mock_kms
def test_decrypt(): def test_decrypt():
conn = boto.kms.connect_to_region('us-west-2') conn = boto.kms.connect_to_region('us-west-2')
response = conn.decrypt('ZW5jcnlwdG1l'.encode('utf-8')) response = conn.decrypt('ZW5jcnlwdG1l'.encode('utf-8'))
response['Plaintext'].should.equal('encryptme') response['Plaintext'].should.equal(b'encryptme')
@mock_kms @mock_kms