""" crypto.keyedHash.tkip_mic A reference implementation of the TKIP Message Integrety Chek (MIC) that is defined in IEEE 802.11i The MIC is based on Michael, a 64-bit MIC, with a design strength of 20 bits. (c) 2002 Paul A. Lambert """ from crypto.keyedHash.michael import Michael class TKIP_MIC(Michael): """ The TKIP MIC Calculation for IEEE 802.11 TGi This MIC algorithm uses the Michael Message Integrity Check (MIC) and incorporates the DA, SA, priority and padding as part of the MIC calculation """ def __init__(self, key=None, version='D3'): """ """ self.version = version Michael.__init__(self,key) def hash(self, sa, da, priority, msduData ): """ The TKIP MIC appends sa, da and priority to msduData and uses the result in the Michael keyed hash to create an 8 octet MIC value """ assert( 0 <= priority <= 15 ), 'Priority must be 4 bit value' assert( (len(sa)==6) and (len(da)==6) ), 'Addresses must be 6 octets' if self.version == 'D3': micData = da + sa + chr(priority) + 3*chr(0) + msduData elif self.version == 'D2': micData = da + sa + msduData else: raise 'bad version' return Michael.hash(self, micData)