Blame SOURCES/9-google-cloud-sdk-oauth2client-python-rsa-to-cryptography.patch

b94b9d
diff -uNr a/bundled/gcp/google-cloud-sdk/lib/third_party/oauth2client/_pure_python_crypt.py b/bundled/gcp/google-cloud-sdk/lib/third_party/oauth2client/_pure_python_crypt.py
b94b9d
--- a/bundled/gcp/google-cloud-sdk/lib/third_party/oauth2client/_pure_python_crypt.py	1980-01-01 09:00:00.000000000 +0100
b94b9d
+++ b/bundled/gcp/google-cloud-sdk/lib/third_party/oauth2client/_pure_python_crypt.py	2019-04-04 11:56:00.292677044 +0200
b94b9d
@@ -19,8 +19,14 @@
b94b9d
 certificates.
b94b9d
 """
b94b9d
 
b94b9d
+from pyasn1.codec.der import decoder
b94b9d
 from pyasn1_modules import pem
b94b9d
-import rsa
b94b9d
+from pyasn1_modules.rfc2459 import Certificate
b94b9d
+from pyasn1_modules.rfc5208 import PrivateKeyInfo
b94b9d
+from cryptography.hazmat.primitives import serialization, hashes
b94b9d
+from cryptography.hazmat.primitives.asymmetric import padding
b94b9d
+from cryptography import x509
b94b9d
+from cryptography.hazmat.backends import default_backend
b94b9d
 import six
b94b9d
 
b94b9d
 from oauth2client import _helpers
b94b9d
@@ -40,7 +46,7 @@
b94b9d
                  '-----END RSA PRIVATE KEY-----')
b94b9d
 _PKCS8_MARKER = ('-----BEGIN PRIVATE KEY-----',
b94b9d
                  '-----END PRIVATE KEY-----')
b94b9d
-_PKCS8_SPEC = None
b94b9d
+_PKCS8_SPEC = PrivateKeyInfo()
b94b9d
 
b94b9d
 
b94b9d
 def _bit_list_to_bytes(bit_list):
b94b9d
@@ -67,7 +73,8 @@
b94b9d
     """
b94b9d
 
b94b9d
     def __init__(self, pubkey):
b94b9d
-        self._pubkey = pubkey
b94b9d
+        self._pubkey = serialization.load_pem_public_key(pubkey,
b94b9d
+            backend=default_backend())
b94b9d
 
b94b9d
     def verify(self, message, signature):
b94b9d
         """Verifies a message against a signature.
b94b9d
@@ -84,8 +91,9 @@
b94b9d
         """
b94b9d
         message = _helpers._to_bytes(message, encoding='utf-8')
b94b9d
         try:
b94b9d
-            return rsa.pkcs1.verify(message, signature, self._pubkey)
b94b9d
-        except (ValueError, rsa.pkcs1.VerificationError):
b94b9d
+            return self._pubkey.verify(signature, message, padding.PKCS1v15(),
b94b9d
+                hashes.SHA256())
b94b9d
+        except (ValueError, TypeError, InvalidSignature):
b94b9d
             return False
b94b9d
 
b94b9d
     @classmethod
b94b9d
@@ -109,19 +117,18 @@
b94b9d
         """
b94b9d
         key_pem = _helpers._to_bytes(key_pem)
b94b9d
         if is_x509_cert:
b94b9d
-            from pyasn1.codec.der import decoder
b94b9d
-            from pyasn1_modules import rfc2459
b94b9d
-
b94b9d
-            der = rsa.pem.load_pem(key_pem, 'CERTIFICATE')
b94b9d
-            asn1_cert, remaining = decoder.decode(der, asn1Spec=rfc2459.Certificate())
b94b9d
+            der = x509.load_pem_x509_certificate(pem_data, default_backend())
b94b9d
+            asn1_cert, remaining = decoder.decode(der, asn1Spec=Certificate())
b94b9d
             if remaining != b'':
b94b9d
                 raise ValueError('Unused bytes', remaining)
b94b9d
 
b94b9d
             cert_info = asn1_cert['tbsCertificate']['subjectPublicKeyInfo']
b94b9d
             key_bytes = _bit_list_to_bytes(cert_info['subjectPublicKey'])
b94b9d
-            pubkey = rsa.PublicKey.load_pkcs1(key_bytes, 'DER')
b94b9d
+            pubkey = serialization.load_der_public_key(decoded_key,
b94b9d
+                backend=default_backend())
b94b9d
         else:
b94b9d
-            pubkey = rsa.PublicKey.load_pkcs1(key_pem, 'PEM')
b94b9d
+            pubkey = serialization.load_pem_public_key(decoded_key,
b94b9d
+                backend=default_backend())
b94b9d
         return cls(pubkey)
b94b9d
 
b94b9d
 
b94b9d
@@ -134,6 +141,8 @@
b94b9d
 
b94b9d
     def __init__(self, pkey):
b94b9d
         self._key = pkey
b94b9d
+        self._pubkey = serialization.load_pem_private_key(pkey,
b94b9d
+            backend=default_backend())
b94b9d
 
b94b9d
     def sign(self, message):
b94b9d
         """Signs a message.
b94b9d
@@ -145,7 +154,7 @@
b94b9d
             string, The signature of the message for the given key.
b94b9d
         """
b94b9d
         message = _helpers._to_bytes(message, encoding='utf-8')
b94b9d
-        return rsa.pkcs1.sign(message, self._key, 'SHA-256')
b94b9d
+        return self._key.sign(message, padding.PKCS1v15(), hashes.SHA256())
b94b9d
 
b94b9d
     @classmethod
b94b9d
     def from_string(cls, key, password='notasecret'):
b94b9d
@@ -163,27 +172,24 @@
b94b9d
             ValueError if the key cannot be parsed as PKCS#1 or PKCS#8 in
b94b9d
             PEM format.
b94b9d
         """
b94b9d
-        global _PKCS8_SPEC
b94b9d
         key = _helpers._from_bytes(key)  # pem expects str in Py3
b94b9d
         marker_id, key_bytes = pem.readPemBlocksFromFile(
b94b9d
             six.StringIO(key), _PKCS1_MARKER, _PKCS8_MARKER)
b94b9d
 
b94b9d
         if marker_id == 0:
b94b9d
-            pkey = rsa.key.PrivateKey.load_pkcs1(key_bytes,
b94b9d
-                                                 format='DER')
b94b9d
-        elif marker_id == 1:
b94b9d
-            from pyasn1.codec.der import decoder
b94b9d
-            from pyasn1_modules import rfc5208
b94b9d
+            pkey = serialization.load_der_private_key(
b94b9d
+                key_bytes, password=None,
b94b9d
+                backend=default_backend())
b94b9d
 
b94b9d
-            if _PKCS8_SPEC is None:
b94b9d
-              _PKCS8_SPEC = rfc5208.PrivateKeyInfo()
b94b9d
+        elif marker_id == 1:
b94b9d
             key_info, remaining = decoder.decode(
b94b9d
                 key_bytes, asn1Spec=_PKCS8_SPEC)
b94b9d
             if remaining != b'':
b94b9d
                 raise ValueError('Unused bytes', remaining)
b94b9d
             pkey_info = key_info.getComponentByName('privateKey')
b94b9d
-            pkey = rsa.key.PrivateKey.load_pkcs1(pkey_info.asOctets(),
b94b9d
-                                                 format='DER')
b94b9d
+            pkey = serialization.load_der_private_key(
b94b9d
+                pkey_info.asOctets(), password=None,
b94b9d
+                backend=default_backend())
b94b9d
         else:
b94b9d
             raise ValueError('No key could be detected.')
b94b9d