Source: https://moodle.utc.fr/file.php/330/cryptoWS/CoursMT10Partie3.pdf