Subversion Repositories pub

Compare Revisions

Ignore whitespace Rev 181 → Rev 182

/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/prf_dot11.py
0,0 → 1,38
""" prf_dot11.py
 
The PRF function is used in a number of places in 802.11i
to create psuedo random octet strings.
 
The parameter 'prefix' is a string that shall be a unique label for each
different purpose of the PRF.
"""
 
import hmac, sha # available in any Python 2.x
 
def PRF( key, prefix, data, number_of_bits):
""" Key, prefix and data are arbitrary strings .
number_of_bits must be a multiple of 8
HMAC_SHA1 generates 20 byte blocks. Enough are generated to get the
requested number of octets and the reslut is truncated to the requested size.
"""
number_of_octets, remainder = divmod(number_of_bits,8)
if remainder != 0:
raise ValueError, 'requested bits not multiple of 8'
R = ''
i = 0
while len(R) <= number_of_octets :
hmac_sha_1= hmac.new( key, prefix + chr(0x00) + data + chr(i), sha )
i = i + 1
R = R + hmac_sha_1.digest() # concatenate latest hash to result string
return R[:number_of_octets] # return R truncated to 'number_of_octets'
 
def PRF_128(key,A,B): return PRF(key,A,B,128)
def PRF_192(key,A,B): return PRF(key,A,B,192)
def PRF_256(key,A,B): return PRF(key,A,B,256)
def PRF_384(key,A,B): return PRF(key,A,B,384)
def PRF_512(key,A,B): return PRF(key,A,B,512)
def PRF_768(key,A,B): return PRF(key,A,B,768)