Esempio n. 1
0
    def __init__(self, **keys):

        if len(keys) == 1:
            self.rsAddr = PayloadIPMIv15.extract_rsAddr(keys['data'])
            self.netFn, self.rsLUN = PayloadIPMIv15.extract_netFn_rsLUN(
                keys['data'])
            self.checksum1 = PayloadIPMIv15.extract_checksum1(keys['data'])
            self.rqAddr = PayloadIPMIv15.extract_rqAddr(keys['data'])
            self.rqSeq, self.rqLUN = PayloadIPMIv15.extract_rqSeq_rqLUN(
                keys['data'])
            self.command = PayloadIPMIv15.extract_command(keys['data'])
            self.request_data = PayloadIPMIv15.extract_request_data(
                keys['data'])
            self.checksum2 = PayloadIPMIv15.extract_checksum2(keys['data'])
        elif len(keys) == 8:
            self.rsAddr = keys['rsAddr']
            self.netFn = keys['netFn']
            self.rsLUN = keys['rsLUN']
            self.checksum1 = IPMIHelper.two_complement_checksum(keys['rsAddr'] \
                                + self.hex_netFN_rsLUN())
            self.rqAddr = keys['rqAddr']
            self.rqSeq = keys['rqSeq']
            self.rqLUN = keys['rqLUN']
            self.command = keys['command']
            self.request_data = keys['request_data']
            self.checksum2 = IPMIHelper.two_complement_checksum(keys['rqAddr'] \
                                + self.hex_rqSeq_rqLUN() \
                                + keys['command'] \
                                + keys['request_data'])
        else:
            raise AttributeError(
                "Only 1 and 8 arguments constructor exists for PayloadIPMIv15 class."
            )
Esempio n. 2
0
 def __init__(self, **keys):
     if len(keys) == 1:
         self.message_tag = PayloadRAKPMessage1.extract_message_tag(
             keys['data'])
         self.reserved = PayloadRAKPMessage1.extract_reserved(keys['data'])
         self.managed_system_session_id = PayloadRAKPMessage1.extract_managed_system_session_id(
             keys['data'])
         self.remote_console_random_number = PayloadRAKPMessage1.extract_remote_console_random_number(
             keys['data'])
         self.requested_max_privilege = PayloadRAKPMessage1.extract_requested_max_privilege(
             keys['data'])
         self.reserved2 = PayloadRAKPMessage1.extract_reserved2(
             keys['data'])
         self.user_name_length = PayloadRAKPMessage1.extract_user_name_length(
             keys['data'])
         self.user_name = PayloadRAKPMessage1.extract_user_name(
             keys['data'])
     elif len(keys) == 4:
         self.message_tag = '00'
         self.reserved = '000000'
         self.managed_system_session_id = PayloadRAKPMessage1.extract_managed_system_session_id(
             keys['rcmp_open_session_response_managed_system_session_id'])
         self.remote_console_random_number = IPMIHelper.generate_rakp_remote_console_random_number(
         )
         self.requested_max_privilege = PayloadRAKPMessage1.extract_requested_max_privilege(
             keys['requested_max_privilege'])
         self.reserved2 = '0000'
         self.user_name_length = PayloadRAKPMessage1.extract_user_name_length(
             keys['user_name_length'])
         self.user_name = PayloadRAKPMessage1.extract_user_name(
             keys['user_name'])
Esempio n. 3
0
    def extract_checksum1(data):
        checksum = data[4:6]
        calculated_checksum = IPMIHelper.two_complement_checksum(data[0:4])

        if checksum == calculated_checksum:
            return checksum
        else:
            raise AttributeError(
                "Extracted checksum1 vs calculated checksum mismatch.")
Esempio n. 4
0
    def extract_checksum2(data):
        checksum = data[len(data) - 2:]
        calculated_checksum = IPMIHelper.two_complement_checksum(
            data[6:len(data) - 2])

        if checksum == calculated_checksum:
            return checksum
        else:
            raise AttributeError(
                "Extracted checksum2 vs calculated checksum mismatch.")
Esempio n. 5
0
    def __init__(self, **keys):

        if len(keys) == 2:
            self.iv = PayloadIPMIMessage.extract_iv(keys['data'])
            self.SIK = keys['SIK']
            self.decrypted_payload = self.decrypt_payload()
            self.rsAddr = PayloadIPMIMessage.extract_rsAddr(
                self.decrypted_payload)
            self.netFn, self.rsLUN = PayloadIPMIMessage.extract_netFn_rsLUN(
                self.decrypted_payload)
            self.checksum1 = PayloadIPMIMessage.extract_checksum1(
                self.decrypted_payload)
            self.rqAddr = PayloadIPMIMessage.extract_rqAddr(
                self.decrypted_payload)
            self.rqSeq, self.rqLUN = PayloadIPMIMessage.extract_rqSeq_rqLUN(
                self.decrypted_payload)
            self.command = PayloadIPMIMessage.extract_command(
                self.decrypted_payload)
            self.request_data = PayloadIPMIMessage.extract_request_data(
                self.decrypted_payload)
            self.checksum2 = PayloadIPMIMessage.extract_checksum2(
                self.decrypted_payload)
        elif len(keys) == 8:
            self.iv = PayloadIPMIMessage.generate_iv()
            self.SIK = keys['SIK']
            self.rsAddr = keys['rsAddr']
            self.netFn = keys['netFn']
            self.rsLUN = keys['rsLUN']
            self.checksum1 = IPMIHelper.two_complement_checksum(keys['rsAddr'] \
                                + self.hex_netFN_rsLUN())
            self.rqAddr = keys['rqAddr']
            self.rqSeq = keys['rqSeq']
            self.rqLUN = keys['rqLUN']
            self.command = keys['command']
            self.request_data = keys['request_data']
            self.checksum2 = IPMIHelper.two_complement_checksum(keys['rqAddr'] \
                                + self.hex_rqSeq_rqLUN() \
                                + keys['command'] \
                                + keys['request_data'])
        else:
            raise AttributeError(
                "Only 1 and 8 arguments constructor exists for PayloadIPMIv15 class."
            )
Esempio n. 6
0
 def __repr__(self):
     return "------- IPMILanRequestMessage -------" \
             + "\nciphered_msg : " + self.ciphered_msg \
             + "\nipmi_sik : " + self.ipmi_sik \
             + "\nRCMP_auth_algorithm : " + self.RCMP_auth_algorithm \
             + "\nipmi_k2_key : " + self.ipmi_k2_key \
             + "\nipmi_k2_short_key : " + self.ipmi_k2_short_key \
             + "\niv : " + self.iv\
             + "\nrsAddr : " + self.rsAddr \
             + "\nnetFn_rslun : " + self.netFn_rslun \
             + "\n  netFn : " + self.extract_netFn() + " human readable : " + IPMIHelper.get_netFn_definition(self.extract_netFn())\
             + "\n  rslun : " + self.extract_rsLun() \
             + "\nchecksum_rsAdd_netFn_lun : " + self.checksum_rsAdd_netFn_lun \
             + "\nrqAddr : " + self.rqAddr \
             + "\nrqSeq_rqLun : " + self.rqSeq_rqLun \
             + "\n  rqSeq : " + self.extract_rqSeq() \
             + "\n  rqLun : " + self.extract_rqLun() \
             + "\ncommand : " + self.command \
             + "\ncommand_data : " + self.command_data \
             + "\nchecksum_two : " + self.checksum_two \
Esempio n. 7
0
 def extract_ipmi_payload_authentication(data):
     payload_type_byte = data[2:4]
     return IPMIHelper.get_payload_authentication(payload_type_byte)
Esempio n. 8
0
 def extract_ipmi_auth_type(data):
     auth_type = data[0:2]
     return IPMIHelper.get_auth_type(auth_type_byte = auth_type)
Esempio n. 9
0
    def extract_rqSeq_rqLUN(data):
        rqSeq_rqLUN = data[8:10]
        bits_rqSeq_rqLUN = IPMIHelper.get_bits(rqSeq_rqLUN)

        return "".join(bits_rqSeq_rqLUN[2:]), "".join(bits_rqSeq_rqLUN[0:2])
 def get_confidentiality_payload_integrity_algo(self):
     byte_hex = self.confidentiality_payload[8:10]
     bits = IPMIHelper.get_bits(byte_hex)
     auth_algorithm = bits[0:5]
     return "".join(auth_algorithm[::-1])
Esempio n. 11
0
 def extract_ipmi_session_seq(data):
     session_sequence_number = data[12:20]
     return IPMIHelper.invert_hex(session_sequence_number)
Esempio n. 12
0
 def hex_netFN_rsLUN(self):
     return IPMIHelper.hexify_binary_string(self.netFn[::-1],
                                            self.rsLUN[::-1])
Esempio n. 13
0
 def get_requested_max_privilege_level(self):
     max_privilege_level = self.requested_max_privilege
     bits = IPMIHelper.get_bits(max_privilege_level)
     max_privilege_level_bits = bits[0:3]
     return "".join(max_privilege_level_bits[::-1])
Esempio n. 14
0
 def get_requested_max_privilege_type(self):
     max_privilege_type = self.requested_max_privilege
     bits = IPMIHelper.get_bits(max_privilege_type)
     max_privilege_type_bit = bits[4]
     return max_privilege_type_bit
Esempio n. 15
0
 def extract_ipmi_payload_type(data):
     payload_type_byte = data[2:4]
     return IPMIHelper.get_payload_type(payload_type_byte) 
Esempio n. 16
0
 def hex_rqSeq_rqLUN(self):
     return IPMIHelper.hexify_binary_string(self.rqSeq[::-1],
                                            self.rqLUN[::-1])
Esempio n. 17
0
 def extract_ipmi_session_id(data):
     session_id = data[4:12]
     return IPMIHelper.invert_hex(session_id)
Esempio n. 18
0
    def extract_netFn_rsLUN(data):
        netFn_LUN = data[2:4]
        bits_netFn_LUN = IPMIHelper.get_bits(netFn_LUN)

        return "".join(bits_netFn_LUN[2:]), "".join(bits_netFn_LUN[0:2])
Esempio n. 19
0
 def extract_message_length(data):
     message_length = data[20:24]
     message_length = IPMIHelper.invert_hex(message_length)
     return int(message_length, 16)
 def get_auth_payload_auth_algo(self):
     byte_hex = self.auth_payload[8:10]
     bits = IPMIHelper.get_bits(byte_hex)
     auth_algorithm = bits[0:5]
     return "".join(auth_algorithm[::-1])