python-m2crypto: install on debian

PyCryptoでJava keytoolからPEMに戻したPublicキーでうまくVerifyできないので、m2ctypto使ってみます。

hide@deb1:~$ apt-cache search m2crypto
python-m2crypto – a crypto and SSL toolkit for Python
hide@deb1:~$ sudo apt-get install python-m2crypto
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています… 完了
以下のパッケージが新たにインストールされます:
  python-m2crypto
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 2 個。
256kB のアーカイブを取得する必要があります。
展開後に追加で 1028kB のディスク容量が消費されます。
取得:1 http://cdn.debian.or.jp etch/main python-m2crypto 0.16-1.1 [256kB]
256kB を 7s で取得しました (34.7kB/s)
未選択パッケージ python-m2crypto を選択しています。
(データベースを読み込んでいます … 現在 55237 個のファイルとディレクトリがイ ンストールされています。)
(…/python-m2crypto_0.16-1.1_i386.deb から) python-m2crypto を展開しています…
python-m2crypto (0.16-1.1) を設定しています …

 

hide@deb1:~/java/key$ python
Python 2.4.4 (#2, Apr 15 2008, 23:43:20)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from M2Crypto import RSA
>>> dir(RSA)
['BIO', 'Err', 'RSA', 'RSAError', 'RSA_pub', '__builtins__', '__doc__', '__file__', '__name__', 'gen_key', 'keygen_callback', 'load_key', 'load_key_bio', 'load_key_string', 'load_pub_key', 'load_pub_key_bio', 'm2', 'new_pub_key', 'no_padding', 'pkcs1_oaep_padding', 'pkcs1_padding', 'rsa_error', 'sslv23_padding', 'sys', 'util']
>>> pub=RSA.load_pub_key('../signer/pubkey.pem')
>>> dir(pub)
['__del__', '__doc__', '__getattr__', '__init__', '__len__', '__module__', '__setattr__', '_pyfree', 'as_pem', 'check_key', 'm2_rsa_free', 'private_decrypt', 'private_encrypt', 'pub', 'public_decrypt', 'public_encrypt', 'rsa', 'save_key', 'save_key_bio', 'save_key_der', 'save_key_der_bio', 'save_pem', 'save_pub_key', 'save_pub_key_bio', 'sign', 'verify']
>>> from M2Crypto import EVP
>>> dir(EVP)
['BIO', 'Cipher', 'Err', 'HMAC', 'MessageDigest', 'PKey', 'RSA', '__builtins__', '__doc__', '__file__', '__name__', 'hmac', 'load_key', 'load_key_bio', 'load_key_string', 'm2', 'util']
>>> sha1=EVP.MessageDigest('sha1')
>>> dir(sha1)
['__del__', '__doc__', '__init__', '__module__', 'ctx', 'digest', 'final', 'm2_md_ctx_free', 'md', 'update']
>>> original="test"
>>> sha1.update(original)
1
>>> digest=sha1.digest()
>>> digest
'\xa9J\x8f\xe5\xcc\xb1\x9b\xa6\x1cL\x08s\xd3\x91\xe9\x87\x98/\xbb\xd3'
>>> sign="Ues+79YCM/gLnQF2ZrfmsiGaRvL0gxg4DDBIqJkFscUft9/B66t/CJ7I3pOr7B+woR58HVDLajsDQtuUzEH1Il8HVR0k53VPr+Lqsj7/zhUVZ8M3ca5rcbBPQ5fw3HOv6ZtECjQS+CaLy8xifHAQbfPgLT9dXpCXc42hPAcEKJU="
>>> import base64
>>> signb=base64.b64decode(sign)
>>> signb
'Q\xeb>\xef\xd6\x023\xf8\x0b\x9d\x01vf\xb7\xe6\xb2!\x9aF\xf2\xf4\x83\x188\x0c0H\xa8\x99\x05\xb1\xc5\x1f\xb7\xdf\xc1\xeb\xab\x7f\x08\x9e\xc8\xde\x93\xab\xec\x1f\xb0\xa1\x1e|\x1dP\xcbj;\x03B\xdb\x94\xccA\xf5"_\x07U\x1d$\xe7uO\xaf\xe2\xea\xb2>\xff\xce\x15\x15g\xc37q\xaekq\xb0OC\x97\xf0\xdcs\xaf\xe9\x9bD\n4\x12\xf8&\x8b\xcb\xccb|p\x10m\xf3\xe0-?]^\x90\x97s\x8d\xa1<\x07\x04(\x95'
>>> pub.verify(digest,signb)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/var/lib/python-support/python2.4/M2Crypto/RSA.py", line 205, in verify
    return m2.rsa_verify(self.rsa, data, signature, digest_type)
M2Crypto.RSA.RSAError: bad signature 

キーとかおかしい?

hide@deb1:~/java/signer$ cat test.py
from M2Crypto import RSA
from M2Crypto import EVP
import base64

original="123a"
sign="Ues+79YCM/gLnQF2ZrfmsiGaRvL0gxg4DDBIqJkFscUft9/B66t/CJ7I3pOr7B+woR58HVDLajsDQtuUzEH1Il8HVR0k53VPr+Lqsj7/zhUVZ8M3ca5rcbBPQ5fw3HOv6ZtECjQS+CaLy8xifHAQbfPgLT9dXpCXc42hPAcEKJU="

pub=RSA.load_pub_key('pubkey.pem')
sha1=EVP.MessageDigest('sha1')
sha1.update(original)
signb=base64.b64decode(sign)
try:
    print pub.verify(sha1.digest(),signb)
except:
    pass
 

hide@deb1:~/java/signer$ python test.py
1

しかし、

try:
    print pub.verify(sha1.digest(),signb)
except:
    pass
try:
    print pub.verify(sha1.digest(),signb)
except:
    pass

 

にすると、

hide@deb1:~/java/signer$ python test.py
1
セグメンテーション違反です

なので、

dig=sha1.digest()
try:
    print pub.verify(dig,signb)
except:
    pass
try:
    print pub.verify(dig,signb)
except:
    pass

にすると、

hide@deb1:~/java/signer$ !py
python test.py
1
1

です。

カテゴリー: 未分類 パーマリンク

python-m2crypto: install on debian への3件のフィードバック

  1. Unknown より:

    Hi,Do you need digital signage, digital sign, ad players and ad displays? Please go Here:www.amberdigital.com.hk(Amberdigital).we have explored and developed the international market with professionalism. We have built a widespread marketing network, and set up a capable management team dedicated to provide beyond-expectation services to our customers.

    amberdigital Contact Us
    E-mail:sstar@netvigator.com
    website:www.amberdigital.com.hk
    alibaba:amberdigital.en.alibaba.com[eg

  2. Unknown より:

    Hi,Do you have used lcd screens, lcd monitor used, surplus lcds and scrap LCDs? Please go here:www.sstar-hk.com(Southern Stars).We are constantly buying re-usable LCD panels.The re-usable panels go through strictly designed process of categorizing, checking, testing, repairing and refurbishing before they are re-used to make remanufactured LCD displays and TV sets.Due to our recent breakthrough in testing and repairing technology of LCD, we can improve the value for your LCD panels.
    website:www.sstar-hk.com[dgfjdafecgbheij]

  3. Unknown より:

    Hi,Do you have used LCDs, second hand LCDs, used flat screens and used LCD monitors? Please go here:www.sstar-hk.com(Southern Stars).We are constantly buying re-usable LCD panels and working for LCD recycling.The re-usable panels go through strictly designed process of categorizing, checking, testing, repairing and refurbishing before they are re-used to make remanufactured LCD displays and TV sets.Due to our recent breakthrough in testing and repairing technology of LCD, we can improve the value for your LCD panels.
    website:www.sstar-hk.com[cbcegfbcgehgfd]

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中