How to provide partial confidentiality and full integrity for a protocol message? 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?
Basically what you want is a authenticated encryption with associated data (AEAD) encryption scheme, of which there are several already available in various libraries.  So just see what is available on your system and use one of them.