Vérifier la normalisation UTF-8 des mnémoniques français (NFC/NFD)
Contexte
Signalé par @vjrj sur le forum Duniter :
Les phrases mnémoniques en français contenant des caractères accentués (é, è, ê, etc.) peuvent avoir des encodages UTF-8 différents (NFC vs NFD) selon la source du copier-coller. Cette différence est invisible à l'œil humain mais provoque des échecs de validation des mots BIP39.
Problème
- Dans Gecko/Durt2, le problème est confirmé et un patch
unorm.nfca été proposé. - Dans Ğinkgo, la lib
bip39_mnemonicnormalise automatiquement. - Dans Cesium2, il faut vérifier si
@polkadot/ui-keyringou notre code applique une normalisation NFC avant la dérivation du keyring.
Action
- Vérifier si
keyring.createFromUri()de Polkadot normalise en NFC en interne - Si non, appliquer
mnemonic.normalize("NFC")avant tout appel àcreateFromUri()dansaccounts.service.ts - Tester avec un mnémonique français contenant des accents en NFD (ex: copié depuis un PDF ou un terminal macOS)
Références
- Post forum
- Code concerné :
src/app/account/accounts.service.ts(lignes priority:high, ~767, ~789)