Akshay; please test this ASAP as some of our packages use Python 3.7 (which is fully supported).
Thanks. On Fri, Jan 4, 2019 at 6:01 AM Akshay Joshi <akshay.jo...@enterprisedb.com> wrote: > Hi SleepProgger > > We haven't tested this with Python 3.7. Can you please log an RM > https://redmine.postgresql.org. Please specify the Python version. > > On Fri, Jan 4, 2019 at 12:26 AM SleepProgger <secur...@gnutp.com> wrote: > >> Since updating to pgAdmin4 3.6 i can't use the SSH tunnel feature anymore. >> >> As soon as i provide the password the following exception occurs: >> >> >> 2019-01-03 15:36:23,007: ERROR flask.app: Object type <class >> 'str'> cannot be passed to C code >> Traceback (most recent call last): >> File >> "/usr/lib/pgadmin4/web/pgadmin/utils/driver/psycopg2/server_manager.py", >> line 409, in create_ssh_tunnel >> tunnel_password = decrypt(tunnel_password, user.password) >> File "/usr/lib/pgadmin4/web/pgadmin/utils/crypto.py", line 54, in >> decrypt >> cipher = AES.new(pad(key), AES.MODE_CFB, iv) >> File "/usr/lib/python3.7/site-packages/Crypto/Cipher/AES.py", line >> 232, in new >> return _create_cipher(sys.modules[__name__], key, mode, *args, >> **kwargs) >> File "/usr/lib/python3.7/site-packages/Crypto/Cipher/__init__.py", >> line 79, in _create_cipher >> return modes[mode](factory, **kwargs) >> File "/usr/lib/python3.7/site-packages/Crypto/Cipher/_mode_cfb.py", >> line 270, in _create_cfb_cipher >> cipher_state = factory._create_base_cipher(kwargs) >> File "/usr/lib/python3.7/site-packages/Crypto/Cipher/AES.py", line >> 103, in _create_base_cipher >> result = start_operation(c_uint8_ptr(key), >> File "/usr/lib/python3.7/site-packages/Crypto/Util/_raw_api.py", line >> 144, in c_uint8_ptr >> raise TypeError("Object type %s cannot be passed to C code" % >> type(data)) >> TypeError: Object type <class 'str'> cannot be passed to C code >> 2019-01-03 15:36:23,041: ERROR flask.app: Could not connected to >> server(#2) - 'smr_imgur_stuff'. >> Error: Failed to decrypt the SSH tunnel password. >> Error: Object type <class 'str'> cannot be passed to C code >> 2019-01-03 15:40:04,070: ERROR flask.app: Object type <class >> 'str'> cannot be passed to C code >> >> After encoding the key (if it is a string) in >> pgadmin4/web/pgadmin/utils/crypto.py everything works again like expected. >> >> >> --- crypto.py 2019-01-03 15:59:41.524945284 +0100 >> >> +++ /usr/lib/pgadmin4/web/pgadmin/utils/crypto.py 2019-01-03 >> 17:02:40.394875557 +0100 >> @@ -39,30 +39,32 @@ >> >> >> def decrypt(ciphertext, key): >> """ >> Decrypt the AES encrypted string. >> >> Parameters: >> ciphertext -- Encrypted string with AES method. >> key -- key to decrypt the encrypted string. >> """ >> >> global padding_string >> >> ciphertext = base64.b64decode(ciphertext) >> iv = ciphertext[:AES.block_size] >> + if hasattr(key, 'encode'): >> + key = key.encode('utf-8') >> cipher = AES.new(pad(key), AES.MODE_CFB, iv) >> decrypted = cipher.decrypt(ciphertext[AES.block_size:]) >> >> return decrypted >> >> >> Python version is: 3.7.1 >> >> If more information is required please let me know. >> >> Thanks, >> >> - SleepProgger >> >> >> >> > > -- > *Akshay Joshi* > > *Sr. Software Architect * > > > > *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* > -- Dave Page Blog: http://pgsnake.blogspot.com Twitter: @pgsnake EnterpriseDB UK: http://www.enterprisedb.com The Enterprise PostgreSQL Company