📄 test_publickey.py
字号:
## Test script for Crypto.Util.PublicKey.#__revision__ = "$Id: test_publickey.py,v 1.7 2003/04/04 19:38:28 akuchling Exp $"import sys, cPicklefrom sancho.unittest import TestScenario, parse_args, run_scenariosfrom Crypto.PublicKey import *from Crypto.Util.randpool import RandomPoolfrom Crypto.Util import numbertested_modules = [ "Crypto.PublicKey.RSA", "Crypto.PublicKey.DSA", "Crypto.PublicKey.ElGamal", "Crypto.PublicKey.qNEW"]class PublicKeyTest (TestScenario): def setup (self): # Set up a random pool; we won't bother to actually fill it with # entropy from the keyboard self.pool = RandomPool(384) self.pool.stir() def shutdown (self): del self.pool def testkey (self, key, randfunc, verbose=0): plaintext="Hello" # Generate maximum-size plaintext maxplain = (key.size() // 8) * '\377' if key.can_encrypt(): if verbose: print ' Encryption/decryption test' K=number.getPrime(10, randfunc) ciphertext=key.encrypt(plaintext, K) self.test_val('key.decrypt(ciphertext)', plaintext) ciphertext=key.encrypt(maxplain, K) self.test_val('key.decrypt(ciphertext)', maxplain) if key.can_sign(): if verbose: print ' Signature test' K=number.getPrime(30, randfunc) signature=key.sign(plaintext, K) self.test_bool('key.verify(plaintext, signature)') self.test_bool('key.verify(plaintext[:-1], signature)', want_true=0) # Change a single bit in the plaintext badtext=plaintext[:-3]+chr( 1 ^ ord(plaintext[-3]) )+plaintext[-3:] self.test_bool('key.verify(badtext, signature)', want_true=0) if verbose: print ' Removing private key data' pubonly=key.publickey() self.test_bool('pubonly.verify(plaintext, signature)') # Test blinding if key.can_blind(): if verbose: print ' Blinding test' K=number.getPrime(30, randfunc) B="garbage" blindedtext=key.blind(plaintext, B) signature=key.sign(blindedtext, K) unblindedsignature=(key.unblind(signature[0], B),) self.test_bool('key.verify(plaintext, unblindedsignature)') self.test_val('key.sign(plaintext, K)', unblindedsignature) # Change a single bit in the blinding factor badB=B[:-3]+chr( 1 ^ ord(B[-3]) )+B[-3:] badunblindedsignature=(key.unblind(signature[0], badB),) self.test_false('key.verify(badtext, badunblindedsignature)') badblindedtext=key.blind(plaintext, badB) badsignature=key.sign(blindedtext, K) badunblindedsignature2=(key.unblind(signature[0], B),) self.test_false('key.verify(badtext, badunblindedsignature2)') def exercise (self, randfunc, pk_mod, verbose=0): N=256 # Key size, measured in bits key=pk_mod.generate(N, randfunc) if verbose: print ' Key data:' for field in key.keydata: print " ", field, ':', hex(getattr(key,field)) if verbose: print " Testing newly generated key" self.testkey(key, randfunc, verbose) if verbose: print " Testing pickled/unpickled key" import pickle s = pickle.dumps(key) ; key2 = pickle.loads(s) self.testkey(key2, randfunc, verbose) if verbose: print " Testing cPickled key" s = cPickle.dumps(key) ; key2 = cPickle.loads(s) self.testkey(key2, randfunc, verbose) if verbose: print def check_rsa(self): "Check RSA algorithm" self.exercise(self.pool.get_bytes, RSA) def check_dsa(self): "Check DSA algorithm" self.exercise(self.pool.get_bytes, DSA) def check_elgamal(self): "Check ElGamal algorithm" self.exercise(self.pool.get_bytes, ElGamal) def check_qnew(self): "Check qNEW algorithm" self.exercise(self.pool.get_bytes, qNEW)# class PublicKeyTestif __name__ == "__main__": (scenarios, options) = parse_args() run_scenarios(scenarios, options)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -