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.nfc a été proposé.
  • Dans Ğinkgo, la lib bip39_mnemonic normalise automatiquement.
  • Dans Cesium2, il faut vérifier si @polkadot/ui-keyring ou notre code applique une normalisation NFC avant la dérivation du keyring.

Action

  1. Vérifier si keyring.createFromUri() de Polkadot normalise en NFC en interne
  2. Si non, appliquer mnemonic.normalize("NFC") avant tout appel à createFromUri() dans accounts.service.ts
  3. Tester avec un mnémonique français contenant des accents en NFD (ex: copié depuis un PDF ou un terminal macOS)

Références