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

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.

Best Answer

  • Gurpreet
    Answer ✓

    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.

Answers

  • 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.

  • 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',

    ...

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

  • Then you can be as explicit, and have

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