2013-10-21 27 views
0

請原諒我的無知。我沒有很好地閱讀Python,我根本寫不出來。如何確定導入的來源?

我想審覈CVE-2013-1445的python項目。我相信找到一個可能需要關注的源文件(以及其他改進機會)。該文件是util.py,具有行:

import base64 

from Crypto.Hash import HMAC 
from Crypto import Random 
... 

當我看Python crypto docs,我沒有看到一個Random類的記載。只有hashlibhmac

The modules described in this chapter implement various algorithms of a 
cryptographic nature. They are available at the discretion of the 
installation. On Unix systems, the crypt module may also be available. 
Here’s an overview: 

    15.1. hashlib — Secure hashes and message digests 
    15.2. hmac — Keyed-Hashing for Message Authentication 

... 

凡正是被Random哪裏來的?它是原生還是第三方?

或者我的問題是,Crypto從哪裏來?如果其第三方Crypto,我如何確定第三方庫和類的包含方式(與本地庫和類)?爲了完整起見,我嘗試瞭解Python的作用域和命名空間,但是現在對我來說沒有任何意義(正如這個問題可能演示的那樣)。例如,對於CryptoRandomRandomCrypto的一部分)沒有明顯的作用域或名稱空間。

在此先感謝。

+0

[加密](https://pypi.python.org/pypi/pycrypto)是不是一個標準庫模塊。 – falsetru

回答

2

Crypto沒有任何標準的Python發行版的一部分。這就是爲什麼Python文檔不提它;-)您可以在這裏下載源:

https://www.dlitz.net/software/pycrypto/

+0

謝謝蒂姆。什麼決定了我應該在什麼時候查找Python的本地庫,以及什麼時候我應該從Python之外尋找其他庫? – jww

+1

@noloader:多年的經驗;-)任何人都可以放置任何他們想放置它們的任何'.py'文件。 *約定*存在於各種平臺上,用於放置外部Python軟件包的位置,但這些約定因平臺而異。 Python目錄下的「site-packages」目錄很常見。 –

+0

謝謝蒂姆。所以我很清楚:從Kevin的轉儲中,「site-packages」是第三方?如果是這樣,那麼原生包在哪裏存儲? – jww

2

你問問文件存儲在哪裏?模塊有一個名爲__file__的屬性,它列出了磁盤上模塊的路徑。

>>> from Crypto import Random 
>>> Random.__file__ 
'/home/ubuntu/.env/local/lib/python2.7/site-packages/Crypto/Random/__init__.pyc' 

(在我的情況下,PyCrypto安裝在我家目錄一個一個的virtualenv)

+0

謝謝凱文。我無法分辨內置內容和外部內容。我的問題類似於(並原諒C/C++所有),我怎麼知道Random是否是'Python :: Crypto :: Random',或者它的'Vendor :: Crypto :: Random'。 – jww

+1

呀'site-packages'通常是第三方模塊。 –