nakagami/micropg

AttributeError: 'module' object has no attribute 'md5'

Closed this issue · 4 comments

When I run this micropython code on a micropython device (esp32-20220117-v1.18.bin )

import micropg
c=micropg.connect(host='192.168.xxx.yyy', database='database',user='username',password='secret')

I get this error

Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
  File "/lib/micropg.py", line 789, in connect
  File "/lib/micropg.py", line 385, in __init__
  File "/lib/micropg.py", line 704, in _open
  File "/lib/micropg.py", line 653, in process_messages
  File "/lib/micropg.py", line 418, in _process_messages
AttributeError: 'module' object has no attribute 'md5'

I have configured postgres to use md5 method on the the subnet

/etc/postgresql/12/main/pg_hba.conf

# IPv4 local connections:

host    all             all             127.0.0.1/32            md5
host    all             all             192.168.1.1/16          md5

I have tested on with python and psycopg2 on a linux computer - here I can connect and insert data to the postgress database

Probably hashlib.md5 is not available in your micropython.

https://docs.micropython.org/en/latest/library/hashlib.html

MicroPython v1.12-1 on 2020-02-09; linux version
Use Ctrl-D to exit, Ctrl-E for paste mode
>>> import hashlib
>>> hashlib.md5
<class 'md5'>
>>>

Well that was spot on.

As the link describe It seems that md5 support is only available for certain micropython. I tried downgrading to esp32 V1.12. but that didn't work either. Would you happen to know an ( easy :) ) workaround for this?

I found this post.

https://forum.micropython.org/viewtopic.php?t=3424

This might be helpful to you
https://forum.micropython.org/viewtopic.php?t=3424#p19964

In that case, you will need to modify micropg.py

Thanks

I got it working with the code from Lemariva as you suggested. The only thing I changed in that code was the last two lines so that the digest function returns raw

  #return '{:032x}'.format(int.from_bytes(raw, 'big'))
   return raw

Subsequently I changed these two lines in mircropg

                    #h1 = binascii.hexlify(hashlib.md5(self.password.encode('ascii') + self.user.encode("ascii")).digest())
                    #h2 = binascii.hexlify(hashlib.md5(h1 + salt).digest())
                    h1 = binascii.hexlify(digest(self.password.encode('ascii') + self.user.encode("ascii")))
                    h2 = binascii.hexlify(digest(h1 + salt))