I want to provide confidentiality and integrity for a protocol. I don't want to encrypt the entire protocol message. I do not want to encrypt the header and timestamp of the protocol message, but I want to have the integrity for the entire protocol message. Thus I do the following:
1- encrypt the message except for the header and timestamp by using CBC. 2- digest the entire message (header, timestamp and encrypted message) by using HMAC.
Is that good practice? if No, what is the best practice?