Как я узнаю, поддерживается ли hashlib.md5 флаг 'usedforsecurity'? - PullRequest
0 голосов
/ 16 февраля 2019

Когда я запускаю следующее на своем Macbook, я получаю сообщение об ошибке:

>>> import hashlib
>>> hashlib.md5(usedforsecurity=False)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: openssl_md5() takes no keyword arguments

Но когда я запускаю его на своем компьютере с Linux, он работает!

>>> import hashlib
>>> hashlib.md5(usedforsecurity=False)
<md5 HASH object @ 0x7f763c1375d0>

Моя проблемаМне нужно запустить некоторый безопасный, не связанный с безопасностью код в моей системе с поддержкой FIPS (например, управлять кэшем пользовательских запросов, который хэширует пользовательский запрос в виде строки MD5).Использование флага usedforsecurity предотвращает исключение FIP.

Это прекрасно работает, кроме случаев, когда я хочу проверить свой код на своем Macbook.Библиотека libcrypto моего Macbook, очевидно, не поддерживает этот флаг usedforsecurity.Есть ли хороший способ определить, поддерживают ли базовые привязки C за hashlib.md5 этот флаг или нет?

1 Ответ

0 голосов
/ 16 февраля 2019

Невозможно явно проверить, имеет ли C-привязка определенный аргумент ключевого слова:

>>> import inspect
>>> inspect.getargspec(hashlib.md5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/inspect.py", line 815, in getargspec
    raise TypeError('{!r} is not a Python function'.format(func))
TypeError: <built-in function openssl_md5> is not a Python function

Вот лучшее, что я мог бы придумать, используя попытку / исключение:

>>> import hashlib
>>> has_usedforsecurity_flag = False
>>> try:
...   hashlib.md5(usedforsecurity=False)
...   has_usedforsecurity_flag = True
... except Exception as e:
...   print e
...   # Doesn't have the flag.
...
<md5 HASH object @ 0x7f763c0b9bc0>
...