@@ -247,25 +247,29 @@ def _run_with_fake_crypto(self, credentials, private_key_text,
247247 from gcloud import credentials as MUT
248248
249249 crypt = _Crypt ()
250- pkcs_v1_5 = _PKCS1_v1_5 ()
251- rsa = _RSA ()
252- sha256 = _SHA256 ( )
250+ load_result = object ()
251+ sign_result = object ()
252+ openssl_crypto = _OpenSSLCrypto ( load_result , sign_result )
253253
254- with _Monkey (MUT , crypt = crypt , RSA = rsa , PKCS1_v1_5 = pkcs_v1_5 ,
255- SHA256 = sha256 ):
254+ with _Monkey (MUT , crypt = crypt , crypto = openssl_crypto ):
256255 result = self ._callFUT (credentials , string_to_sign )
257256
258257 if crypt ._pkcs12_key_as_pem_called :
259258 self .assertEqual (crypt ._private_key_text ,
260259 base64 .b64encode (private_key_text ))
261260 self .assertEqual (crypt ._private_key_password , 'notasecret' )
262- # sha256._string_to_sign is always bytes.
263- if isinstance (string_to_sign , six .binary_type ):
264- self .assertEqual (sha256 ._string_to_sign , string_to_sign )
261+ self .assertEqual (openssl_crypto ._loaded ,
262+ [(openssl_crypto .FILETYPE_PEM , _Crypt ._KEY )])
265263 else :
266- self .assertEqual (sha256 ._string_to_sign ,
267- string_to_sign .encode ('utf-8' ))
268- self .assertEqual (result , b'DEADBEEF' )
264+ self .assertEqual (openssl_crypto ._loaded ,
265+ [(openssl_crypto .FILETYPE_PEM , private_key_text )])
266+
267+ if not isinstance (string_to_sign , six .binary_type ):
268+ string_to_sign = string_to_sign .encode ('utf-8' )
269+ self .assertEqual (openssl_crypto ._signed ,
270+ [(load_result , string_to_sign , 'SHA256' )])
271+
272+ self .assertEqual (result , sign_result )
269273
270274 def test_p12_type (self ):
271275 from oauth2client .client import SignedJwtAssertionCredentials
@@ -450,14 +454,19 @@ def test_signed_jwt_for_p12(self):
450454 credentials = client .SignedJwtAssertionCredentials (
451455 'dummy_service_account_name' , PRIVATE_KEY , scopes )
452456 crypt = _Crypt ()
453- rsa = _RSA ()
454- with _Monkey (MUT , crypt = crypt , RSA = rsa ):
457+ load_result = object ()
458+ openssl_crypto = _OpenSSLCrypto (load_result , None )
459+
460+ with _Monkey (MUT , crypt = crypt , crypto = openssl_crypto ):
455461 result = self ._callFUT (credentials )
456462
457463 self .assertEqual (crypt ._private_key_text ,
458464 base64 .b64encode (PRIVATE_KEY ))
459465 self .assertEqual (crypt ._private_key_password , 'notasecret' )
460- self .assertEqual (result , 'imported:__PEM__' )
466+ self .assertEqual (result , load_result )
467+ self .assertEqual (openssl_crypto ._loaded ,
468+ [(openssl_crypto .FILETYPE_PEM , _Crypt ._KEY )])
469+ self .assertEqual (openssl_crypto ._signed , [])
461470
462471 def test_service_account_via_json_key (self ):
463472 from oauth2client import service_account
@@ -476,12 +485,16 @@ def _get_private_key(private_key_pkcs8_text):
476485 'dummy_service_account_id' , 'dummy_service_account_email' ,
477486 'dummy_private_key_id' , PRIVATE_TEXT , scopes )
478487
479- rsa = _RSA ()
480- with _Monkey (MUT , RSA = rsa ):
488+ load_result = object ()
489+ openssl_crypto = _OpenSSLCrypto (load_result , None )
490+
491+ with _Monkey (MUT , crypto = openssl_crypto ):
481492 result = self ._callFUT (credentials )
482493
483- expected = 'imported:%s' % (PRIVATE_TEXT ,)
484- self .assertEqual (result , expected )
494+ self .assertEqual (result , load_result )
495+ self .assertEqual (openssl_crypto ._loaded ,
496+ [(openssl_crypto .FILETYPE_PEM , PRIVATE_TEXT )])
497+ self .assertEqual (openssl_crypto ._signed , [])
485498
486499
487500class Test__get_expiration_seconds (unittest2 .TestCase ):
@@ -596,43 +609,32 @@ def SignedJwtAssertionCredentials(self, **kw):
596609class _Crypt (object ):
597610
598611 _pkcs12_key_as_pem_called = False
612+ _KEY = '__PEM__'
599613
600614 def pkcs12_key_as_pem (self , private_key_text , private_key_password ):
601615 self ._pkcs12_key_as_pem_called = True
602616 self ._private_key_text = private_key_text
603617 self ._private_key_password = private_key_password
604- return '__PEM__'
618+ return self . _KEY
605619
606620
607- class _RSA (object ):
621+ class _OpenSSLCrypto (object ):
608622
609- _imported = None
623+ FILETYPE_PEM = object ()
610624
611- def importKey (self , pem ):
612- self ._imported = pem
613- return 'imported:%s' % pem
625+ def __init__ (self , load_result , sign_result ):
626+ self ._loaded = []
627+ self ._load_result = load_result
628+ self ._signed = []
629+ self ._sign_result = sign_result
614630
631+ def load_privatekey (self , key_type , key_text ):
632+ self ._loaded .append ((key_type , key_text ))
633+ return self ._load_result
615634
616- class _PKCS1_v1_5 (object ):
617-
618- _pem_key = _signature_hash = None
619-
620- def new (self , pem_key ):
621- self ._pem_key = pem_key
622- return self
623-
624- def sign (self , signature_hash ):
625- self ._signature_hash = signature_hash
626- return b'DEADBEEF'
627-
628-
629- class _SHA256 (object ):
630-
631- _string_to_sign = None
632-
633- def new (self , string_to_sign ):
634- self ._string_to_sign = string_to_sign
635- return self
635+ def sign (self , pkey , to_sign , sign_algo ):
636+ self ._signed .append ((pkey , to_sign , sign_algo ))
637+ return self ._sign_result
636638
637639
638640class _AppIdentity (object ):
0 commit comments