Source: http://deptinfo.cnam.fr/~paradinas/cours/SecuCodeMobileCours(H_W)-PP.pdf