"hmac" --- Keyed-Hashing for Message Authentication
***************************************************

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

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

This module implements the HMAC algorithm as described by **RFC
2104**. The interface allows to use any hash function with a *fixed*
digest size. In particular, extendable output functions such as
SHAKE-128 or SHAKE-256 cannot be used with HMAC.

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

   Renvoie un nouvel objet HMAC.  *key* est un objet *byte* ou
   *bytearray* représentant la clé secrète.  Si *msg* est présent, un
   appel à "update(msg)" est effectué. *digestmod* permet de choisir
   l’algorithme à utiliser par l’objet HMAC, il accepte un nom de
   fonction de hachage (peut être tout ce qui convient à
   "hashlib.new()"), un constructeur de fonction de hachage ou un
   module implémentant la PEP 247. Bien qu’il soit après *msg*,
   *digestmod* est un paramètre obligatoire.

   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.

   Modifié dans la version 3.8: The *digestmod* argument is now
   required.  Pass it as a keyword argument to avoid awkwardness when
   you do not have an initial *msg*.

hmac.digest(key, msg, digest)

   Renvoie le code d'authentification de *msg*, pour la clé secrète
   *key* et à l'algorithme *digest* donné. La fonction est équivalente
   à "HMAC(key, msg, digest).digest()", mais elle utilise une
   implémentation optimisée en C ou *inline*, qui est plus rapide pour
   les messages dont la taille leur permet de tenir en mémoire vive.
   Les paramètres *key*, *msg* et *digest* ont la même signification
   que pour "new()".

   Détail d'implémentation CPython, l'implémentation C optimisée n'est
   utilisée que lorsque le *digest* est une chaîne de caractères et le
   nom d'un algorithme de hachage implémenté dans OpenSSL.

   Ajouté dans la version 3.7.

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:

     When comparing the output of "digest()" to an externally supplied
     digest during a verification routine, it is recommended to use
     the "compare_digest()" function instead of the "==" operator to
     reduce the vulnerability to timing attacks.

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:

     When comparing the output of "hexdigest()" to an externally
     supplied digest during a verification routine, it is recommended
     to use the "compare_digest()" function instead of the "=="
     operator to reduce the vulnerability to timing attacks.

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.

   Ajouté dans la version 3.4.

HMAC.name

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

   Ajouté dans la version 3.4.

Modifié dans la version 3.10: Removed the undocumented attributes
"HMAC.digest_cons", "HMAC.inner", and "HMAC.outer".

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.

   Ajouté dans la version 3.3.

   Modifié dans la version 3.10: Cette fonction utilise la fonction
   "CRYPTO_memcmp()" de OpenSSL quand celle-ci est disponible.

Voir aussi:

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