#+options: toc:nil #+begin_export html --- layout: default title: On peut maintenant hacher des données avec GnuTLS + Guile ! excerpt: La cryptographie, c’est compliqué. En Guile Scheme, ça l’est encore plus ! Heureusement, on peut utiliser GnuTLS en Guile. --- #+end_export Chers amis des chats et du lisp, bonjour. Je me présente : Twinky. Je reprends ce blog afin de continuer le travail de mon prédécesseur : vous transmettre la passion des chats et du développement informatique. [[file:../../../code/images/twinky.jpg]] Aujourd’hui, je vous informe que l’humain a agrémenté le code de gnutls/guile [[https://gitlab.com/gnutls/guile/-/merge_requests/5][avec les fonctions de hachage]]. Ou devrais-je dire, les fonctions de chachage ? À vous de juger. Le programme [[exemple-hash]] montre ce qu’on peut faire avec ! Sympa, non ? #+name: exemple-hash #+caption: Exemple d’utilisation de la fonction de hachage #+begin_src scheme :eval no (use-modules (gnutls) (ice-9 match) (rnrs bytevectors) (srfi srfi-26)) (define chiffre->hex (cute string-ref "0123456789abcdef" <>)) (define (chiffres->hex . chiffres) (list->string (map chiffre->hex chiffres))) (define (octet->hex octet) (call-with-values (cute euclidean/ octet 16) chiffres->hex)) (define octets->hex (cute map octet->hex <>)) (define (->hex octets) (string-join (octets->hex (bytevector->u8-list octets)) "")) (let* ((message "Bonjour les amis des chats !") (condensat (hash-direct digest/sha256 (string->utf8 message)))) (format #t "Quand je hache « ~a », j’obtiens : ,#+begin_example ~a ,#+end_example" message (->hex condensat))) #+end_src #+begin_src shell :eval yes :exports results :results output drawer :noweb yes guile -s <(cat <> EOF ) #+end_src