question

Upvotes
Accepted
3 0 0 0

Error "module 'Crypto.Cipher.AES' has no attribute 'MODE_CCM'" in sqsQueue.py when subscribing to RDP newsAlerts

Error "module 'Crypto.Cipher.AES' has no attribute 'MODE_CCM'" pops up , in sqsQueue.py when subscribing to RDP newsAlerts

Curable by 'pip install pycryptodomex', and amending the sqsQueue.py as:

10: from Crypto.Cipher import AES

to

10: from Cryptodome.Cipher import AES

Could you please adjust the https://developers.refinitiv.com/refinitiv-data-platform/refinitiv-data-platform-apis/downloads "Quickstart and Python tutorials source code" accourdingly.

Or recommend an alternative solution.

rdp-apirefinitiv-data-platformaws
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
Accepted
16k 41 12 19

pycryptodome was chosen since it is a fork of popular PyCrypto and a drop in replacement. It does not expose the module as Cryptodome.Cipher but as Crypto.Cipher.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
16k 41 12 19

Hi @oleksiy.bondarenko1,

Can you please elaborate your question - why do you need CCM? Both the News and Research alerts are encrypted using AES-GCM. The tutorial and the comment in the sample file state that it depends on pycryptodome module for decryption.

Does that not work? Thanks.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
3 0 0 0

Indeed

The error I get under default anaconda-packaged pycrypto 2.6.1 , on both linux and windows, since late 2019, is

AttributeError: module 'Crypto.Cipher.AES' has no attribute 'MODE_GCM'

from Crypto.Cipher import AES (this import is used in your sample code)

dir(AES)

Out[53]:

['AESCipher',

'MODE_CBC',

'MODE_CFB',

'MODE_CTR',

'MODE_ECB',

'MODE_OFB',

'MODE_OPENPGP',

'MODE_PGP',

'_AES',

...

So I need to pip install pycryptodome (or pycryptodomex)

from Cryptodome.Cipher import AES (need to change the import to this, i.e. Cryptodome)

dir(AES)

Out[55]:

['MODE_CBC',

'MODE_CCM',

'MODE_CFB',

'MODE_CTR',

'MODE_EAX',

'MODE_ECB',

'MODE_GCM',

...

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
16k 41 12 19

Well, the tutorial and the sample explicitly state that it uses pycryptodome.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
3 0 0 0

Then you can be as explicit, and have

from Cryptodome.Cipher import AES (rather than from Crypto.Cipher import AES )

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.