Mise bout à bout

Nous avons maintenant tous les composants nécessaires pour pouvoir vérifier si nos mots de passe sont identiques à des mots de passe retrouvés dans des fuites de données.

  1. Écrivez une fonction publique hibp::check_accounts() prenant des comptes en paramètre et renvoyant une liste de comptes et du nombre d'occurrences où les mots de passe associés ont été trouvés dans des fuites de données. Cette liste devra être ordonnée du plus fréquent au moins fréquent.
pub fn check_accounts(accounts: &[Account]) -> Result<Vec<(&Account, u64)>, Error> {
  todo!()
}

Cette fonction utilisera tout d'abord hibp::sha1_by_prefix() pour regrouper les comptes par préfixe de SHA-1. Elle invoquera ensuite hibp::get_suffixes() sur chaque préfixe pour récupérer les suffixes associés, éventuellement de manière parallèle. S'il n'y a pas eu d'erreur dans cette phase, au sein de chaque préfixe, on pourra ajouter chaque compte au vecteur résultat en l'accompagnant du nombre d'occurrences ou de 0 si le suffixe du compte n'est pas présent.

Après avoir trié le vecteur résultat (à l'aide par exemple de la méthode sort_unstable_by_key()), on pourra le renvoyer.

  1. Appelez la fonction hibp::check_accounts() depuis le programme principal au sein de la sous-commande hibp.

Bravo ! Vous avez maintenant implémenté une suite complète de vérification d'une liste de comptes. N'hésitez pas à l'utiliser avec vos propres mots de passe si vous souhaitez les tester en masse, par exemple en les exportant de votre gestionnaire de mots de passe.

Note importante

Attention à ne pas surcharger l'API de Have I been pwned? par des requêtes trop nombreuses. Si vous avez récupéré le fichier accounts.txt donné en exemple, sélectionnez en un petit nombre d'entrées pour faire vos tests, par exemple les 100 premières :

$ head -n 100 accounts.txt > small.txt

Vous pouvez ensuite utiliser le fichier small.txt comme fichier de test, ou en construire un autre à la main.