Compiler-based Techniques to Secure Cryptographic Embedded Software against Side Channel Attacks