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