Subversion Repositories pub

Compare Revisions

Problem with comparison.

Ignore whitespace Rev HEAD → Rev 183

/relevation/ext/cryptopy-1.2.5.patched/crypto/entropy/prn_rijndael.py
0,0 → 1,62
""" crypto.entropy.prn_rijndael
 
A Psudeo Random Number Generator based on Rijndael_256k_256b
The algorithm is based on Section 13.4 of:
"AES Proposal: Rijndael", Joan Daemen, Vincent Rijmen
 
Copyright © (c) 2002 by Paul A. Lambert
Read LICENSE.txt for license information.
"""
 
from crypto.cipher.rijndael import Rijndael
from crypto.cipher.base import noPadding
from binascii import b2a_hex
 
defaultSeed = "An arbirary 32 byte string!!!!!!" # can be changed by the truely paranoid
 
class PRN_Rijndael:
""" A Psudeo Random Number Generator based on Rijndael_256k_256b
The algorithm is based on Section 13.4 of:
"AES Proposal: Rijndael", Joan Daemen, Vincent Rijmen
"""
def __init__(self, seed=defaultSeed):
self.__algorithm = Rijndael(padding=noPadding(),keySize=32, blockSize=32)
self.reset()
self.reseed(seed)
 
def reset(self):
self.__algorithm.setKey(self.__algorithm.keySize*chr(0)) # set key to all zeros
self.__state = self.__algorithm.blockSize*chr(0) # a single block of zeros
 
def reseed(self,seed):
while len(seed) > 0 :
if len(seed) < self.__algorithm.blockSize:
block = seed + (self.__algorithm.blockSize-len(seed))*chr(0)
seed = ''
else:
block = seed[:self.__algorithm.blockSize]
seed = seed[self.__algorithm.blockSize:]
self.__algorithm.setKey( self.__algorithm.encrypt(block) )
 
def getBytes(self, numBytes):
""" Return a psuedo random byte string of length numBytes """
bytes = ''
while len(bytes)< numBytes :
bytes = bytes + self.getSomeBytes()
return bytes[:numBytes] # truncate to the requested length
 
def getSomeBytes(self):
""" Psuedo random bytes are generated 16 bytes at a time.
The state is updated by applying Rijndael using the Cipher
Key. The first 128 bits of the state are output as a “pseudorandom number”.
"""
self.__state = self.__algorithm.encrypt(self.__state)
return self.__state[:16]