A hardware secure element (HSMa) comprising: - a microprocessor; - a memory, such as a non-volatile memory, having stored a plurality of software routines (DCH, HEH, SHE, CH0, CH1) executable by said microprocessor, wherein each software routine (DCH, HEH, SHE, CH0, CH1) starts at a respective memory start address (A_DCH, A_HEH, A_SEH, A_CH0, ACH1), wherein said memory has stored a look-up table starting at a respective memory start address (A_LUT), wherein the elements of said look-up table contain the memory start addresses (A_DCH, A_HEH, A_SEH, A_CH0, ACH1) of said software routines (DCH, HEH, SHE, CH0, CH1); and - a receiver circuit configured to receive data comprising a command field; characterized in that said hardware secure element (HSMa) comprises: - a hardware message handler module having associated a configuration register (302b, RCHBA) containing the memory start address (A_LUT) of said look-up table, said hardware message handler module being configured to: a) determine a software routine (DCH, HEH, SHE, CH0, CH1) to be executed by said microprocessor as a function of said command by determining a memory address of an element of said look-up table as a function of said memory start address (A_LUT) of said look-up table and said command field by combinational operations, and b) provide data (ADDR) to said microprocessor indicating said software routine to be executed by providing said memory address (ADDR) of said element of said look-up table to said microprocessor; and wherein said microprocessor is configured for: - reading the content of said memory at said memory address (ADDR) provided by said hardware message handler module, and - performing a jump to the memory address read from said memory address (ADDR) provided by said hardware message handler module. - a microprocessor; - a memory, such as a non-volatile memory, having stored a plurality of software routines (DCH, HEH, SHE, CH0, CH1) executable by said microprocessor, wherein each software routine (DCH, HEH, SHE, CH0, CH1) starts at a respective memory start address (A_DCH, A_HEH, A_SEH, A_CH0, ACH1), wherein said memory has stored a look-up table starting at a respective memory start address (A_LUT), wherein the elements of said look-up table contain the memory start addresses (A_DCH, A_HEH, A_SEH, A_CH0, ACH1) of said software routines (DCH, HEH, SHE, CH0, CH1); and - a receiver circuit configured to receive data comprising a command field; - a hardware message handler module having associated a configuration register (302b, RCHBA) containing the memory start address (A_LUT) of said look-up table, said hardware message handler module being configured to: a) determine a software routine (DCH, HEH, SHE, CH0, CH1) to be executed by said microprocessor as a function of said command by determining a memory address of an element of said look-up table as a function of said memory start address (A_LUT) of said look-up table and said command field by combinational operations, and b) provide data (ADDR) to said microprocessor indicating said software routine to be executed by providing said memory address (ADDR) of said element of said look-up table to said microprocessor; and a) determine a software routine (DCH, HEH, SHE, CH0, CH1) to be executed by said microprocessor as a function of said command by determining a memory address of an element of said look-up table as a function of said memory start address (A_LUT) of said look-up table and said command field by combinational operations, and b) provide data (ADDR) to said microprocessor indicating said software routine to be executed by providing said memory address (ADDR) of said element of said look-up table to said microprocessor; and - reading the content of said memory at said memory address (ADDR) provided by said hardware message handler module, and - performing a jump to the memory address read from said memory address (ADDR) provided by said hardware message handler module.