Skip to content

Commit 1bfa469

Browse files
committed
Merge pull request #559 from dhermes/fix-537
Removing hard dependency on PyOpenSSL.
2 parents edfd5e2 + a17cafe commit 1bfa469

File tree

4 files changed

+29
-30
lines changed

4 files changed

+29
-30
lines changed

gcloud/storage/acl.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,11 @@ def __str__(self):
108108
if not self.identifier:
109109
return str(self.type)
110110
else:
111-
return '{self.type}-{self.identifier}'.format(self=self)
111+
return '{acl.type}-{acl.identifier}'.format(acl=self)
112112

113113
def __repr__(self):
114-
return '<ACL Entity: {self} ({roles})>'.format(
115-
self=self, roles=', '.join(self.roles))
114+
return '<ACL Entity: {acl} ({roles})>'.format(
115+
acl=self, roles=', '.join(self.roles))
116116

117117
def get_roles(self):
118118
"""Get the list of roles permitted by this entity.

gcloud/storage/connection.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
from Crypto.Hash import SHA256
2424
from Crypto.PublicKey import RSA
2525
from Crypto.Signature import PKCS1_v1_5
26-
from OpenSSL import crypto
2726
from oauth2client import client
27+
from oauth2client import crypt
2828
from oauth2client import service_account
2929
import pytz
3030

@@ -57,11 +57,8 @@ def _get_pem_key(credentials):
5757
"""
5858
if isinstance(credentials, client.SignedJwtAssertionCredentials):
5959
# Take our PKCS12 (.p12) key and make it into a RSA key we can use.
60-
pkcs12 = crypto.load_pkcs12(
61-
base64.b64decode(credentials.private_key),
62-
'notasecret')
63-
pem_text = crypto.dump_privatekey(
64-
crypto.FILETYPE_PEM, pkcs12.get_privatekey())
60+
pem_text = crypt.pkcs12_key_as_pem(credentials.private_key,
61+
credentials.private_key_password)
6562
elif isinstance(credentials, service_account._ServiceAccountCredentials):
6663
pem_text = credentials._private_key_pkcs8_text
6764
else:

gcloud/storage/test_connection.py

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -767,17 +767,23 @@ def test_bad_argument(self):
767767
self.assertRaises(TypeError, self._callFUT, None)
768768

769769
def test_signed_jwt_for_p12(self):
770+
import base64
770771
from oauth2client import client
771772
from gcloud._testing import _Monkey
772773
from gcloud.storage import connection as MUT
773774

774775
scopes = []
776+
PRIVATE_KEY = 'dummy_private_key_text'
775777
credentials = client.SignedJwtAssertionCredentials(
776-
'dummy_service_account_name', 'dummy_private_key_text', scopes)
777-
crypto = _Crypto()
778+
'dummy_service_account_name', PRIVATE_KEY, scopes)
779+
crypt = _Crypt()
778780
rsa = _RSA()
779-
with _Monkey(MUT, crypto=crypto, RSA=rsa):
781+
with _Monkey(MUT, crypt=crypt, RSA=rsa):
780782
result = self._callFUT(credentials)
783+
784+
self.assertEqual(crypt._private_key_text,
785+
base64.b64encode(PRIVATE_KEY))
786+
self.assertEqual(crypt._private_key_password, 'notasecret')
781787
self.assertEqual(result, 'imported:__PEM__')
782788

783789
def test_service_account_via_json_key(self):
@@ -816,7 +822,6 @@ def test_wrong_type(self):
816822
from gcloud._testing import _Monkey
817823
from gcloud.storage import connection as MUT
818824

819-
crypto = _Crypto()
820825
pkcs_v1_5 = _PKCS1_v1_5()
821826
rsa = _RSA()
822827
sha256 = _SHA256()
@@ -827,7 +832,7 @@ def _get_pem_key(credentials):
827832
BAD_CREDENTIALS = None
828833
EXPIRATION = '100'
829834
SIGNATURE_STRING = 'dummy_signature'
830-
with _Monkey(MUT, crypto=crypto, RSA=rsa, PKCS1_v1_5=pkcs_v1_5,
835+
with _Monkey(MUT, RSA=rsa, PKCS1_v1_5=pkcs_v1_5,
831836
SHA256=sha256, _get_pem_key=_get_pem_key):
832837
self.assertRaises(NameError, self._callFUT,
833838
BAD_CREDENTIALS, EXPIRATION, SIGNATURE_STRING)
@@ -837,17 +842,21 @@ def _run_test_with_credentials(self, credentials, account_name):
837842
from gcloud._testing import _Monkey
838843
from gcloud.storage import connection as MUT
839844

840-
crypto = _Crypto()
845+
crypt = _Crypt()
841846
pkcs_v1_5 = _PKCS1_v1_5()
842847
rsa = _RSA()
843848
sha256 = _SHA256()
844849

845850
EXPIRATION = '100'
846851
SIGNATURE_STRING = 'dummy_signature'
847-
with _Monkey(MUT, crypto=crypto, RSA=rsa, PKCS1_v1_5=pkcs_v1_5,
852+
with _Monkey(MUT, crypt=crypt, RSA=rsa, PKCS1_v1_5=pkcs_v1_5,
848853
SHA256=sha256):
849854
result = self._callFUT(credentials, EXPIRATION, SIGNATURE_STRING)
850855

856+
if crypt._pkcs12_key_as_pem_called:
857+
self.assertEqual(crypt._private_key_text,
858+
base64.b64encode('dummy_private_key_text'))
859+
self.assertEqual(crypt._private_key_password, 'notasecret')
851860
self.assertEqual(sha256._signature_string, SIGNATURE_STRING)
852861
SIGNED = base64.b64encode('DEADBEEF')
853862
expected_query = {
@@ -900,20 +909,14 @@ def request(self, **kw):
900909
return self._response, self._content
901910

902911

903-
class _Crypto(object):
904-
905-
FILETYPE_PEM = 'pem'
906-
_loaded = _dumped = None
907-
908-
def load_pkcs12(self, buffer, passphrase):
909-
self._loaded = (buffer, passphrase)
910-
return self
912+
class _Crypt(object):
911913

912-
def get_privatekey(self):
913-
return '__PKCS12__'
914+
_pkcs12_key_as_pem_called = False
914915

915-
def dump_privatekey(self, type, pkey, cipher=None, passphrase=None):
916-
self._dumped = (type, pkey, cipher, passphrase)
916+
def pkcs12_key_as_pem(self, private_key_text, private_key_password):
917+
self._pkcs12_key_as_pem_called = True
918+
self._private_key_text = private_key_text
919+
self._private_key_password = private_key_password
917920
return '__PEM__'
918921

919922

setup.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@
1313

1414
REQUIREMENTS = [
1515
'httplib2',
16-
'oauth2client',
16+
'oauth2client >= 1.4.6',
1717
'protobuf >= 2.5.0',
1818
'pycrypto',
19-
'pyopenssl',
2019
'pytz',
2120
'six',
2221
]

0 commit comments

Comments
 (0)