# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later import hashlib from django.contrib.auth.hashers import PBKDF2PasswordHasher from django.utils.crypto import constant_time_compare class CustomNK15Hasher(PBKDF2PasswordHasher): """ Permet d'importer les mots de passe depuis la Note KFet 2015. Si un hash de mot de passe est de la forme : `custom_nk15$$` où est un entier quelconque (symbolisant normalement un nombre d'itérations) et le hash du mot de passe dans la Note Kfet 2015, alors ce hasher va vérifier le mot de passe. N'ayant pas la priorité (cf note_kfet/settings/base.py), le mot de passe sera converti automatiquement avec l'algorithme PBKDF2. """ algorithm = "custom_nk15" def verify(self, password, encoded): if '|' in encoded: salt, db_hashed_pass = encoded.split('$')[2].split('|') return constant_time_compare(hashlib.sha256((salt + password).encode("utf-8")).hexdigest(), db_hashed_pass) return super().verify(password, encoded)