UNIT TEST PROTOCOL
password_strength_evaluator.js
www/js/crypto/password_strength_evaluator.js · tests/jest/unit/crypto/password_strength_evaluator.test.js
📁
www/js/crypto/
📝 Évaluation de la force des mots de passe : entropie par alphabet, adjectifs, scores zxcvbn, entropie ajustée.
55
Tests
55
Passing
0
Skipped
12
Suites
Ordre des détections d'alphabet :
binary → octal → hex → base58 → base64
(du plus restrictif au plus large). Guard chaîne vide ajouté dans
DS_calculateAdjustedEntropy
. Vecteur hex 64 chars :
'deadbeef'.repeat(8)
(non ambigu avec binary).
▸
Singleton Pattern
This retourne une instance définie
pass
This retourne toujours la même instance
pass
appel direct du constructeur lève une TypeError
pass
ALPHABET_ENTROPIES est défini comme propriété statique
pass
▸
is_binary_string
retourne true pour "010101"
pass
retourne true pour "0" et "1"
pass
retourne true pour une longue chaîne binaire (128 chars)
pass
retourne false pour "012" (contient 2)
pass
retourne false pour chaîne vide, undefined, null
pass
▸
is_hexa_string
retourne true pour "deadbeef"
pass
retourne true pour "DEADBEEF" (uppercase converti)
pass
retourne true pour "0x..." (préfixe accepté)
pass
retourne false pour "xyz"
pass
retourne false pour chaîne vide et undefined
pass
▸
is_base58_string / is_base64_string / is_octal_string
is_base58_string — true pour adresse Bitcoin valide
pass
is_base58_string — false pour "0" (absent de l'alphabet)
pass
is_base64_string — true pour chaîne base64 avec/sans padding
pass
is_base64_string — false pour caractères invalides
pass
is_octal_string — true pour "01234567"
pass
is_octal_string — false pour "8"
pass
▸
is_upper_case / is_lower_case / is_digit / is_special_character
is_upper_case : "A" → true, "a" → false, "1" → false
pass
is_lower_case : "a" → true, "A" → false, "1" → false
pass
is_digit : "5" → true, "0" → true, "a" → false
pass
is_special_character : "#", "*", "!" → true ; "a", "5" → false
pass
▸
getEntropyForAlphabetAsBits
alphabet 2 → 1.00 bit (binary)
pass
alphabet 16 → 4.00 bits (hex)
pass
alphabet 58 → ~5.86 bits (base58)
pass
alphabet 64 → 6.00 bits (base64)
pass
retourne 0 pour alphabet_size ≤ 1
pass
augmente avec la taille de l'alphabet
pass
▸
getPasswordStrengthAsBits
"010101" (binary) → 6 × 1.00 = 6.00 bits
Détecté comme binary (alphabet le plus restrictif testé en premier)
pass
"deadbeef" (hex, 8 chars) → 8 × 4.00 = 32.00 bits
pass
retourne un nombre positif pour un mot de passe classique
pass
retourne un nombre plus élevé pour un mot de passe plus long
pass
"deadbeef".repeat(8) (hex, 64 chars) → 256 bits
Vecteur non-ambigu : hex mais pas binary/octal
pass
▸
getPasswordStrengthBitsAsAdjective
"pass" (< 28 bits) → "Very Weak"
pass
"deadbeef" (32 bits) → "Very Weak" ou "Weak"
pass
"deadbeef".repeat(8) (256 bits) → "Very Secure"
pass
retourne une valeur parmi les 6 adjectifs définis
pass
▸
getPasswordStrengthScore (zxcvbn)
retourne un entier entre 0 et 4
pass
"password" → score 0 (très faible)
pass
"123456" → score 0
pass
mot de passe aléatoire long → score ≥ 3
pass
▸
DS_calculateAdjustedEntropy
retourne un nombre positif pour un mot de passe non vide
pass
retourne 0 pour une chaîne vide
Guard ajouté : charsetSize=0 → log2(0)=-∞ → NaN sans guard
pass
augmente avec la longueur (caractères similaires)
pass
▸
DS_entropyToScore
< 28 → score 0 (Very Weak)
pass
28–34 → score 1 (Weak)
pass
35–44 → score 2 (Fair)
pass
45–54 → score 3 (Strong)
pass
≥ 55 → score 4 (Very Strong)
pass
▸
DS_comprehensivePasswordStrength
retourne un objet avec zxcvbnScore, entropy, feedback, finalAssessment
pass
zxcvbnScore est entre 0 et 4
pass
finalAssessment est entre 0 et 4
pass
finalAssessment ≥ zxcvbnScore (max des deux métriques)
pass