15.2. "hmac" — Authentification de messages par hachage en combinaison avec une clé secrète
*******************************************************************************************

**Code source :** Lib/hmac.py

======================================================================

Ce module implémente l'algorithme HMAC tel que décrit par la **RFC
2104**.

hmac.new(key, msg=None, digestmod=None)

   Return a new hmac object.  *key* is a bytes or bytearray object
   giving the secret key.  If *msg* is present, the method call
   "update(msg)" is made. *digestmod* is the digest name, digest
   constructor or module for the HMAC object to use. It supports any
   name suitable to "hashlib.new()" and defaults to the "hashlib.md5"
   constructor.

   Modifié dans la version 3.4: Le paramètre *key* peut être un *byte*
   ou un objet *bytearray*. Le paramètre *msg* peut être de n'importe
   quel type pris en charge par "hashlib". Le paramètre *digestmod*
   peut être le nom d'un algorithme de hachage.

   Obsolète depuis la version 3.4: MD5 as implicit default digest for
   *digestmod* is deprecated.

Un objet HMAC a les méthodes suivantes :

HMAC.update(msg)

   Met à jour l'objet HMAC avec *msg*. Des appels répétés sont
   équivalents à un seul appel avec la concaténation de tous les
   arguments : "m.update(a); m.update(b)" est équivalent à "m.update(a
   + b)".

   Modifié dans la version 3.4: Le paramètre *msg* peut être de
   n'importe quel type géré par "hashlib".

HMAC.digest()

   Renvoie le condensat des octets passés à la méthode "update()"
   jusque là. L'objet *bytes* renvoyé sera de la même longueur que la
   *digest_size* de la fonction de hachage donnée au constructeur. Il
   peut contenir des octets qui ne sont pas dans la table ASCII, y
   compris des octets NUL.

   Avertissement:

     Si vous devez vérifier la sortie de "digest()" avec un condensat
     obtenu par ailleurs par un service extérieur durant une routine
     de vérification, il est recommandé d'utiliser la fonction
     "compare_digest()" au lieu de l'opérateur "==" afin de réduire la
     vulnérabilité aux attaques temporelles.

HMAC.hexdigest()

   Comme "digest()" sauf que ce condensat est renvoyé en tant que
   chaîne de caractères de taille doublée contenant seulement des
   chiffres hexadécimaux. Cela permet d’échanger le résultat sans
   problèmes par e-mail ou dans d'autres environnements ne gérant pas
   les données binaires.

   Avertissement:

     Si l'on compare la sortie de "hexdigest()" avec celle d'un
     condensat connu obtenu par un service extérieur durant une
     routine de vérification, il est recommandé d'utiliser la fonction
     "compare_digest()" au lieu de l'opérateur "==" afin de réduire la
     vulnérabilité aux attaques basées sur les temps de réponse.

HMAC.copy()

   Renvoie une copie (un clone) de l'objet HMAC. C'est utile pour
   calculer de manière efficace les empreintes cryptographiques de
   chaînes de caractères qui ont en commun une sous-chaîne initiale.

Un objet *code d'authentification de message* (HMAC) possède les
attributs suivants :

HMAC.digest_size

   La taille du code d'authentification (c-à-d de l'empreinte
   cryptographique) en octets.

HMAC.block_size

   La taille interne d'un bloc de l'algorithme de hachage en octets.

   Nouveau dans la version 3.4.

HMAC.name

   Le nom canonique de ce HMAC, toujours en lettres minuscules, par
   exemple "hmac-md5".

   Nouveau dans la version 3.4.

Ce module fournit également la fonction utilitaire suivante :

hmac.compare_digest(a, b)

   Renvoie "a == b". Cette fonction a été conçue pour prévenir les
   attaques temporelles en évitant l'implémentation de courts-circuits
   basés sur le contenu, ce qui la rend appropriée pour de la
   cryptographie. *a* et *b* doivent être du même type : soit "str"
   (caractères ASCII seulement, comme retourné par "HMAC.hexdigest()"
   par exemple), ou *bytes-like object*.

   Note:

     Si *a* et *b* sont de longueurs différentes ou si une erreur se
     produit, une attaque temporelle pourrait en théorie obtenir des
     informations sur les types et longueurs de *a* et de *b*, mais
     pas sur leurs valeurs.

   Nouveau dans la version 3.3.

Voir aussi:

  Module "hashlib"
     Le module Python fournissant des fonctions de hachage sécurisé.
