Quellcode durchsuchen

Replace pycrypto with cryptography

Nuwan Goonasekera vor 9 Jahren
Ursprung
Commit
27b217e070

+ 15 - 5
cloudbridge/cloud/providers/gce/helpers.py

@@ -1,9 +1,19 @@
-import os
-from Crypto.PublicKey import RSA
+# based on http://stackoverflow.com/a/39126754
+from cryptography.hazmat.primitives import serialization as crypt_serialization
+from cryptography.hazmat.primitives.asymmetric import rsa
+from cryptography.hazmat.backends import default_backend
 
 
 def generate_key_pair():
-    kp = RSA.generate(2048, os.urandom)
-    public_key = kp.publickey().exportKey("OpenSSH").split(" ")[1]
-    private_key = kp.exportKey("PEM")
+    key_pair = rsa.generate_private_key(
+        backend=default_backend(),
+        public_exponent=65537,
+        key_size=2048)
+    private_key = key_pair.private_bytes(
+        crypt_serialization.Encoding.PEM,
+        crypt_serialization.PrivateFormat.PKCS8,
+        crypt_serialization.NoEncryption())
+    public_key = key_pair.public_key().public_bytes(
+        crypt_serialization.Encoding.OpenSSH,
+        crypt_serialization.PublicFormat.OpenSSH)
     return private_key, public_key

+ 1 - 1
cloudbridge/cloud/providers/gce/services.py

@@ -119,7 +119,7 @@ class GCEKeyPairService(BaseKeyPairService):
             # elems should be "ssh-rsa <public_key> <email>"
             elems = key.split(" ")
             if elems and elems[0]:  # ignore blank lines
-                yield GCEKeyPairService.GCEKeyInfo(elems[0], elems[1],
+                yield GCEKeyPairService.GCEKeyInfo(elems[0], elems[1].encode('ascii'),
                                                    elems[2])
 
     def gce_metadata_save_op(self, callback):

+ 1 - 1
setup.py

@@ -21,7 +21,7 @@ openstack_reqs = ['python-novaclient>=7.0.0',
                   'python-neutronclient>=6.0.0',
                   'python-keystoneclient>=3.8.0']
 aws_reqs = ['boto>=2.38.0']
-gce_reqs = ['google-api-python-client>=1.4.2', "pycrypto"]
+gce_reqs = ['google-api-python-client>=1.4.2', "cryptography>=1.4"]
 full_reqs = base_reqs + aws_reqs + openstack_reqs + gce_reqs
 dev_reqs = (['tox>=2.1.1', 'moto>=0.4.18', 'sphinx>=1.3.1'] + full_reqs)