Programmation

gPass 0.8

Monday, 24 July 2017
|
Écrit par
Grégory Soutadé

Logo gPass

Voici la dernière mouture de gPass, le gestionnaire de mot de passe pour Firefox et Chrome ! Il s'agit là d'une fort belle version avec plein de nouveautés. La précédente date d'un an et demi déjà, plusieurs facteurs ont motivé le développement de celle-ci. Tout d'abord, Firefox abandonne le support des addons pour les remplacer par les webextensions. Ces webextensions utilisent la même API que les extensions Chrome de Google. Si cela facilite le travail du développeur, il place désormais Mozilla au rang des suiveurs dans le monde du web. Le support de l'addon gPass pour firefox est donc abandonné au profit du nouveau code de la webextension (quasi identique à celui de Chrome).

Le gros avantage de cette nouvelle API est le support de la cryptographie de manière (quasi) native. L'option SHADOW_LOGINS est donc activée par défaut. Le mode de chaînage ECB n'étant pas supporté par l'API, j'ai décidé de changer la façon dont sont chiffrées les données avec du CBC, ce qui est plus solide cryptographiquement parlant. J'ai aussi noté que si les mots de passes étaient salés, ils ne l'étaient pas correctement car ce dernier était ajouté à la fin et non au début, donc inutile lorsqu'il y a plus de 13 caractères (la longueur par défaut étant 16...). Le protocole d'échange avec le serveur a lui aussi évolué pour passer en version 4. D'autres modifications mineures ont été apportées sur la partie serveur :

  • Retour automatique en haut
  • Disposition de l'interface
  • Génération des mots de passe (plus facilement lisible pour les humains)
  • Les mots de passes en clair ne sont affichés que pendant 15 minutes
  • Ajout de tests unitaires

Autre fonctionnalité intéressante qui me trottait dans la tête depuis un certain temps : le blocage des connexions lorsque l'on détecte une clé maître en clair dans les paramètres de la requête. Malheureusement ce mécanisme ne fonctionne que sous Chrome.

L'ajout de la cryptographie native est un réel plus. Néanmoins c'est un véritable calvaire à programmer. En effet, les développeurs ont eu le bon goût de l'implémenter en utilisant des Promise, donc des appels de fonctions asynchrones (car en arrière plan le navigateur invoque un binaire OpenSSL), alors que nous avons besoin du résultat immédiatement ! Bref, il a fallu attendre l'arrivée de la version 53 et du support des directives await et async pour retrouver un semblant d'utilisabilité. Hélas, c'est la période choisie par Debian pour entrer dans sa phase de gel en vue de la sortie de la nouvelle version stable. Il y a donc eu 6 + 1 mois de retard car je ne voulais pas casser la compatibilité avec des serveurs alors que les addons seraient resté bloqués en v0.7. De plus, je ne pouvais pas tester directement.

Autre nouveauté pour ceux qui ne veulent pas ouvrir leur navigateur, il y a désormais une interface accessible en ligne de commandes (CLI/terminal) ! Cela permet également d'étendre le gestionnaire à autre chose que du pur web !

Les sources sont disponibles sur ma forge sous licence GPLv3.

Chrono v2

Monday, 17 July 2017
|
Écrit par
Grégory Soutadé

Chrono de face

La première version de mon chronomètre ne m'a pas pleinement satisfait : trop gros, trop lourd, afficheur parfois capricieux. Néanmoins, l'expérience acquise m'a permis d'entrevoir plusieurs pistes d'améliorations. Le critère principal pour une v2 était de pouvoir fabriquer un circuit imprimé d'une taille réduite pour pas trop cher. Après quelques recherches j'ai trouvé mon bonheur chez OSH Park. Il s'agit d'une association basée aux États-Unis dont le but est de regrouper les designs des particuliers afin de réduire les coûts. Cerise sur le gâteau : il n'y a pas de frais de port ! Leurs PCB sont facilement reconnaissables par leur couleur violette unique. De plus ils ont un site extrêmement bien fait qui permet de visualiser le résultat des masques avant de lancer la production. Encore mieux, ils acceptent toute sorte de formats en entrée (eagle, kicad...).

Comparaison ancien et nouveau chrono

Je me suis donc lancé pour une deuxième version de manière un peu plus autonome (mais toujours avec l'aide précieuse de Frédéric M.). Le nouveau schéma est basé sur des MOSFET et non plus des transistors. Il est double face. Les 4 piles rechargeables sont remplacées par une batterie Lithium-ion beaucoup plus petite et légère (mais avec la moitié d'autonomie, 1A contre 2A). Plus besoin d'ouvrir le boîtier pour assurer la recharge, grâce à une charge via câble USB. Fonction importante qui manquait : le boîtier aura un aimant sur sa face arrière.

Bref, le jour et la nuit par rapport à la première version. En volume, la v2 est 2,44 fois plus petite (5,6x7,5x2,9 contre 7,2x8,1x5,1) avec un poids de 126g (aimant compris) contre 258g.

Chrono de face

Un mois après avoir passé la commande, les 3 PCB arrivent. Ils sont de très bonne qualité, vernis, trous métallisés, marquage en surface. Seul bémol : il faut scier à la main les bouts qui dépassent (provenant de la plaque de production), alors que le reste de la carte est parfaitement découpée...

L'étape de la soudure se passe bien. Certains trous sont cependant un peu trop petits, et il faut forcer un peu pour rentrer l'afficheur et une LED. Première mise sous tension : il ne brûle pas, c'est une bonne nouvelle. Tentative de programmation avec MPLab. Rien ne se passe... C'est le moment où le doute s'installe : problème de soudure ? Problème de résistance ? Problème de niveau de tension au niveau des MOSFET ? ... La première erreur est dans le code, les MOSFET P fonctionnent en logique inverse (niveau bas pour qu'ils soient passants). Après correction l'afficheur reste éteint. Un petit tour avec le multimètre ainsi qu'une revue de schéma un peu plus poussée et l'on remarque que toutes les masses ne sont pas reliées. En effet, eagle fait une différence entre les pattes GND et VSS, il faut donc relier les deux mondes par un nouveau fil. Autre blague, le 7 segments HDSP-B03E n'était plus disponible. Bêtement, j'ai pris un B04E en pensant qu'ils étaient identiques. Sauf qu'en réalité la polarité des LED est inversée sur ce dernier. En prenant cela en compte, j'aurais pu faire baisser le prix global (les MOSFET P sont plus chers que les N).

Finalement le circuit fonctionne parfaitement. Une fois le programme optimisé, j'arrive à faire fonctionner le PIC à 2Mhz contre 4Mhz pour la première version (en gardant la même taille du binaire résultant), et, si j'avais regroupé les pattes des transistors N et P sur les blocs B et C sans les mélanger, je pense qu'il serait possible de descendre encore la fréquence.

La fabrication de la boîte fut une autre étape particulièrement longue. J'ai utilisé un générateur de boîtes sous inkscape, mais celui-ci ne crée pas les créneaux sur certains côtés, ce qui n'est pas pratique du tout. Obligé de faire une multitude de retouches à la main. De plus, la marge ajoutée n'est pas agréable, j'aurais dû la positionner à 0. Au final, je l'ai complètement re déssiné à la main. Petite blague qui m'a fait perdre beaucoup de temps : il y a une différence entre ma version Linux et la version Windows utilisée au fablab. Si on ne choisit pas la bonne option au lancement du logiciel, les dimensions sont faussées. Ça a donc été une vraie galère pour réaliser ce que je voulais, alors qu'il ne m'avait fallu que deux essais la fois précédente.

Chrono face arrière

J'ai donc pu faire une boîte très ajustée et y scotcher un aimant récupéré sur un vieux disque dur. Sauf que ce dernier a le bon goût de créer des perturbations électromagnétiques et vider la batterie pendant la nuit ! L'utilisation d'aimants neodymes plus petits et moins puissants suffit si on les place bien (mais ils coûtent plus cher).

Voilà, 6 mois d'agitation pour un petit chrono. Pour ceux que ça intéresse, je joins l'archive complète du projet avec les schémas, documentation et sources. Les problèmes de masses et de taille de trous sont réglés (v2.1), mais il faudrait pouvoir souder le connecteur JST de la batterie au lieu de le laisser en l'air (ça libérerait un connecteur de l'ICSP et des fils inutiles). Ou encore utiliser un connecteur USB traversant.

Hex offsets

Saturday, 06 May 2017
|
Écrit par
Grégory Soutadé

Capture Hex Offsets

Voici un petit outils qui me manquait depuis fort longtemps (du moins quand j'en ai besoin). En apparence, rien d'extraordinaire : une simple calculatrice hexadécimale avec uniquement les opérations "plus" et "moins"... Pourtant elle est extrêmement pratique quand on travaille sur deux bases d'adresses différentes (avec un décalage d'offset).

Quelques options ont été rajoutées comme le fait de pouvoir facilement remettre une ligne à zéro, valider ou non l'entrée, copier-coller le résultat dans le presse-papier, tout effacer, régler le nombre d'entrées (jusqu'à 20) et convertir un nombre en décimal ou hexadécimal.

Le tout a été réalisé avec QtCreator (donc C++ et Qt) et est disponible sur ma forge sous licence GPLv3.

IWLA 0.4

Monday, 30 January 2017
|
Écrit par
Grégory Soutadé

Capture d'écran IWLA

Une petite version d'IWLA est sortie. Les changements ne sont pas extraordinaires, mais il y a deux corrections de bug qui méritent de paraître. Au menu cette année :

  • Ajout de l'option -p qui permet de ne regénérer que l'affichage (sans la phase d'analyse)
  • Affichage de la bande passante des robots (possibilité de n'afficher que le top 10 pour gagner de la place)
  • Deux bugs corrigés concernant la compression des fichiers (dont un qui pouvait entraîner des corruptions de base de données).

À vos téléchargements !