⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_publickey.py

📁 python的加密库
💻 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 + -